2012-11-22 82 views
0

我想構建一個表達式分析器來評估數學表達式的值。然而問題在於某些類別的表達評估爲無理數。在JAVA中執行符號數學

讓我們舉一個例子,如(√2)² 這應該評估爲2。但是由於邏輯程序編碼它返回一個小數點數。

首先√2評估這等於1.4142135,然後將結果平方給予1.9999998

目前,什麼都可以做的是通過JLink表達發送到Mathematica,然後使用結果。但是,這需要第三方軟件的幫助。

我想知道這整個事情是否可以在java中實現。

+0

有一個[相關問題](http://stackoverflow.com/questions/3587557/good-symbolic-math-cas-library-for-java),它應該給你一些線索。 – ShyJ

回答

2

是的,你當然可以在Java中實現一個表達式解析器。我認爲你的根本錯誤不在於Java編程,而在於程序設計。

您應該儘可能晚地評估Surds。相反,您應該評估表達式,如(sqrt(n))^2sqrt(n)*sqrt(n)sqrt(n)*sqrt(n)n。只有這樣才能考慮將n轉換爲等效的浮點數。

在您的方法中發現的錯誤是浮點運算的一個特性,您將很難與之對抗。更好的策略是通過在符號表達式上實現符號操作來解決它。

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