我想構建一個表達式分析器來評估數學表達式的值。然而問題在於某些類別的表達評估爲無理數。在JAVA中執行符號數學
讓我們舉一個例子,如(√2)²
這應該評估爲2
。但是由於邏輯程序編碼它返回一個小數點數。
首先√2
評估這等於1.4142135
,然後將結果平方給予1.9999998
目前,什麼都可以做的是通過JLink表達發送到Mathematica,然後使用結果。但是,這需要第三方軟件的幫助。
我想知道這整個事情是否可以在java中實現。
我想構建一個表達式分析器來評估數學表達式的值。然而問題在於某些類別的表達評估爲無理數。在JAVA中執行符號數學
讓我們舉一個例子,如(√2)²
這應該評估爲2
。但是由於邏輯程序編碼它返回一個小數點數。
首先√2
評估這等於1.4142135
,然後將結果平方給予1.9999998
目前,什麼都可以做的是通過JLink表達發送到Mathematica,然後使用結果。但是,這需要第三方軟件的幫助。
我想知道這整個事情是否可以在java中實現。
是的,你當然可以在Java中實現一個表達式解析器。我認爲你的根本錯誤不在於Java編程,而在於程序設計。
您應該儘可能晚地評估Surds。相反,您應該評估表達式,如(sqrt(n))^2
至sqrt(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);
有一個[相關問題](http://stackoverflow.com/questions/3587557/good-symbolic-math-cas-library-for-java),它應該給你一些線索。 – ShyJ