我正面臨一種情況,那就是生病時必須計算一些巨大的數學表達式。這些表達式本身很簡單,即只有傳統的BODMAS基本數據,但操作數出現的數字非常大,達到1000位數字。我知道java.math模塊的BigInteger類,但我正在尋找一種不同的方式,以便計算也能以快速的方式進行。我仍然在Java中找到自己的腳,所以任何關於這方面的指示或建議都會有很大的幫助。Java - 計算大型數學表達式
問候 p1nG
我正面臨一種情況,那就是生病時必須計算一些巨大的數學表達式。這些表達式本身很簡單,即只有傳統的BODMAS基本數據,但操作數出現的數字非常大,達到1000位數字。我知道java.math模塊的BigInteger類,但我正在尋找一種不同的方式,以便計算也能以快速的方式進行。我仍然在Java中找到自己的腳,所以任何關於這方面的指示或建議都會有很大的幫助。Java - 計算大型數學表達式
問候 p1nG
既然你說你是Java新手,我會建議你使用BigInteger和BigDecimal的,除非你想編寫自己的任意大量的處理程序。 BigInteger和BigDecimal對於它們的大部分用途來說足夠快。我唯一遇到速度問題的時候是處理一百萬位數字的數字。
這是除非你有一個特定的需要不使用BigInteger。
@all:謝謝你的回覆。我曾嘗試過BigInteger,而我遇到的問題是當我嘗試計算一個像「7 + 3」這樣的字符串,然後將結果存儲在BigInteger中時,它會引發NumberFormat異常。任何關於這可以如何工作的指針? – ping 2009-12-24 16:24:53
你想要的是BigInteger(「7」)。add(BigInteger(「3」)) – 2010-01-03 23:00:01
嘗試使用BigInteger,通過一些測試計算來分析結果,並在您尋找更優化的東西之前查看它是否適用於您。
首先正確編寫程序(使用BigFoo),然後確定優化是否合適。
BigInteger/BigFloat將是您可能獲得的最優化的廣義數學實現。
如果你想要它更快,你可以編寫程序集來使用位移專業數學(好吧,像2除以往往是一個簡單的右移),但如果你做的不止一個幾種不同類型的方程,這將是非常不切實際的。
BigInteger與int相比只是很慢,但它可能是最好的,你可能會獲得超過64位左右的數據操作,而無需使用另一種語言 - 即使這樣你可能會贏得「T得到多大的改善,除非其他語言彙編...
我驚訝的是,與1000個數字方程有一個實際的應用(也許除了加密) 難道你能解釋一下你在做什麼,什麼你的速度要求是?
有點相關:http://stackoverflow.com/questions/1653131/what-programming-language-will-enable-me-to-enter-a-very-long-number-without-conv/ – jldupont 2009-12-23 14:37:05
你好嗎知道BigInteger不是「快速」嗎? – 2009-12-23 14:42:38
@ping:快速的方式不是一個可測量的要求(例如,你是否需要在少於1毫秒內完成計算)你試過BigInteger並且認爲它太慢? – Alon 2009-12-23 14:58:49