繁体   English   中英

JAVA中的符号数学实现

[英]Symbolic Mathematics implementation in JAVA

我正在尝试构建一个表达式解析器,用于计算数学表达式的值。 然而,问题在于某些类别的表达式,其评估为无理数。

让我们举一个例子,如(√2)²这应该评估为2但是由于程序编码的逻辑,它返回一个小数点数。

首先评估√2等于1.4142135 ,然后将结果平方给出1.9999998

目前,所有可以做的是通过JLink将表达式发送到Mathematica ,然后使用结果。 然而,这需要第三方软件的帮助。

我想知道是否可以在java中实现这一切。

是的,您当然可以在Java中实现表达式解析器。 我认为你的基本错误不是Java编程,而是程序设计。

你不应该在尽可能晚地评估冲击。 相反,您应该将(sqrt(n))^2sqrt(n)*sqrt(n)sqrt(n)*sqrt(n)等表达式求值为n 只有这样才能考虑将n转换为等效的浮点数。

您在方法中确定为错误的是浮点运算的一个特征,您将很难对抗它。 更好的策略是通过对符号表达式实现符号操作来解决它。

Double value = new Double(2);
Double power = new Double(2);
Double result = Math.pow(value, power);
result = Math.sqrt(result);
System.out.print(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM