【发布时间】:2014-02-27 21:13:50
【问题描述】:
我想使用区间算术来计算给定方程的范围。例如,C = f(A, B) 其中
f = -12.5 * log10 ( 1 + ( 0.64*( 1-cos(A) )/( 1-cos(B/4) ))
我会给出 A 和 B 的范围作为输入和一个包含 f 的字符串。我拥有的区间算术库可以计算 f = log A 等简单函数的范围。因此,要计算上述函数的范围,我必须手动编写多个步骤,例如首先找到 cos(A),然后 1 - cos(A)依此类推,直到我得到整个方程的范围。我试图找出是否有办法解析这个方程,可能会得到解析器在计算过程中计算的步骤,这样在每一步,我都可以找到一个范围,让解析器进入下一步。
为了更清楚,我想知道表达式求值过程中的每一步。例如,如果 f = A + B (1-C)。软件首先计算 1-c,然后计算 B * (1-C),然后将其添加到 A。因此,我需要控制每一步,以便找到迄今为止评估的表达式的范围。
感谢任何指针。
【问题讨论】:
-
您可能可以借用shunting yard algorithm 的实现。这应该让您开始可以评估大部分表达式。
-
您可以查看ANTLR
标签: java parsing math integer-arithmetic