[英]Symbolic Mathematics implementation in JAVA
我正在嘗試構建一個表達式解析器,用於計算數學表達式的值。 然而,問題在於某些類別的表達式,其評估為無理數。
讓我們舉一個例子,如(√2)²
這應該評估為2
但是由於程序編碼的邏輯,它返回一個小數點數。
首先評估√2
等於1.4142135
,然后將結果平方給出1.9999998
目前,所有可以做的是通過JLink將表達式發送到Mathematica ,然后使用結果。 然而,這需要第三方軟件的幫助。
我想知道是否可以在java中實現這一切。
是的,您當然可以在Java中實現表達式解析器。 我認為你的基本錯誤不是Java編程,而是程序設計。
你不應該在盡可能晚地評估沖擊。 相反,您應該將(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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.