Javascript后缀数学
我遇到了一个关于程序速度的小问题,我想知道如何解决它。我接受一个用户输入等式,形式如下:Javascript后缀数学,javascript,evaluation,postfix-notation,Javascript,Evaluation,Postfix Notation,我遇到了一个关于程序速度的小问题,我想知道如何解决它。我接受一个用户输入等式,形式如下: "y = 3*x^2 - 2*x" 为了简洁起见,我将使用这个示例。将其转换为后缀后,我得到: [ 3, x, 2, ^, *, 2, x, *, - ] 所以如果我想把它画出来,我只需要做一个x值的数组,然后找到相应的y值,让我的线通过。但是,如果我能够将此用户输入转化为以下功能,则该功能的评估速度会更快(这对于制作动画图形至关重要): function userExpression( x ){
"y = 3*x^2 - 2*x"
为了简洁起见,我将使用这个示例。将其转换为后缀后,我得到:
[ 3, x, 2, ^, *, 2, x, *, - ]
所以如果我想把它画出来,我只需要做一个x值的数组,然后找到相应的y值,让我的线通过。但是,如果我能够将此用户输入转化为以下功能,则该功能的评估速度会更快(这对于制作动画图形至关重要):
function userExpression( x ){
return 3*Math.pow(x,2)-2*x
}
是否有任何方法将此字符串转换为函数,以便更快地进行计算。我很清楚,我可以解析我制作的后缀表达式,它会工作,但我相当确定这将成为一个非常糟糕的瓶颈,特别是如果我使用3D图形的话
我本来想在页面中插入带有
脚本标记的html,但我想听听其他人在这种情况下会怎么做。另外,我很想知道你是如何用C++或C++、Python之类的其他语言来做的。< p>如果你已经知道如何解析表达式并生成一个必需的JavaScript作为一个字符串,那么你可以通过使用<代码>函数< /COD>构造函数:< /P>创建编译函数来优化性能。
var expression=“return 3*Math.pow(x,2)-2*x;”;
var func=新函数(“x”,表达式);
log(func(-2));
log(func(-1));
log(func(0));
log(func(1));
log(func(2))代码>
我不知道您要解决的实际问题是什么。这是一个关于性能的问题,还是一个关于如何解析文本等式并将其转换为函数的问题。“我相当确定这将成为一个非常糟糕的瓶颈”请先尝试一下,看看它是否会导致性能问题。避免过早优化。@phari我确实尝试过,而且确实有效!这不是过早的优化,这是一个重要的优化,以避免每帧调用数千次后缀分析器。@jfriend00我已经分析了字符串,我想知道如何将其作为函数进行计算,而不是使用post script计算器。@user2662833:您不应该运行数千次分析器,只有评估者。这应该很快。很好,这正是我所需要的。如果我已经将字符串解析为后缀,会有其他不可预见的问题吗?我从来没有使用过eval,因为它会引起很多仇恨:P@user2662833您只需要小心确保用户不能在公式中包含任何恶意代码。如果您的解析算法只允许数字、已知运算符和变量名,那么您可能状态良好。非常感谢:)我非常感谢您的帮助!