将Math表达式与JavaScript进行比较

时间:2014-09-25 04:42:53

标签: javascript math

如何在JavaScript中比较两个数学表达式? 例如“1 + x”和“x + 1”。

有一个JavaScript Math解析器,但我找不到比较解析表达式的逻辑: https://github.com/silentmatt/js-expression-eval/blob/master/test.js

还有其他选择吗?

由于

2 个答案:

答案 0 :(得分:0)

您需要一个计算机代数系统(CAS)才能真正测试两个表达式是否相等。我在JavaScript中唯一知道的是javascript-cas,我不确定这是否符合您的要求。其他库如math.js和提到的js-expression-eval可以解析表达式,但是错过逻辑来理解两个表达式是否相等。

实用的方法可能是比较x的许多不同值的两个表达式的结果,并查看它们是否具有相同的结果。但这并不总是有用,例如0/x+1x-x为每个x提供相同的结果,但它们并不相同。

答案 1 :(得分:0)

如果您需要知道相等性,那么您可以进行近似比较:

  1. 从表达式

    中提取变量名称
    • 您有x+11+x所以有一个变量x
  2. genre伪随机或它们的网格值集

    • 使用从-inf到+ inf的一些规格点,如x = {-1e-10,1e-9,...... 1e + 9,1e + 10}
    • 添加少量randoms
  3. 使用当前变量集

    解析每个表达式
    • 所以先取x值
    • 为它计算表达式值
    • 如果不相同则表达不一样
  4. 从genered数据集中尝试所有案例

    • 如果全部通过则表达式可能相同
    • 如果没有(即使只是一次通过)那么表达式就不一样了