java - JAVA中符号数学的实现

标签 java wolfram-mathematica jlink

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

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

首先计算√2,其等于1.4142135,然后将结果平方,得到1.9999998

目前只能将表达式发送至 Mathematica通过 JLink然后使用结果。然而,这需要第三方软件的帮助。

我想知道这整个事情是否可以用java实现。

最佳答案

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

您不应该尽可能晚地评估 Surd。相反,您应该将 (sqrt(n))^2 等表达式评估为 sqrt(n)*sqrt(n)sqrt(n)*sqrt( n)n。只有这样,您才应该考虑将 n 转换为等效的 float 。

您所确定的方法中的错误是浮点算术的一个功能,您将很难与之对抗。更好的策略是通过对符号表达式实现符号操作来解决这个问题。

关于java - JAVA中符号数学的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515761/

相关文章:

compilation - Mathematica : Compile NSolve, NMinimize 等数值函数

java - ListView 项目未使用 AsyncTask 加载

lisp - Mathematica 中函数和模式匹配之间的性能差异

java - 子列表索引越界异常

image-processing - 创建 3D 几何 - CAD 软件

java - 如何从 Java Web Start (JDK 8) 升级到 jlink (JDK 9+) 以实现自动更新应用程序?

java - 使用 JavaFX 11 的自定义 JRE

JavaFx:无法创建播放器

java - 从 Google 托管虚拟机(自定义/Java)连接到 Google Cloud 数据存储?

Java正则表达式考虑空值