2009-12-23 125 views
3

我正面臨一種情況,那就是生病時必須計算一些巨大的數學表達式。這些表達式本身很簡單,即只有傳統的BODMAS基本數據,但操作數出現的數字非常大,達到1000位數字。我知道java.math模塊的BigInteger類,但我正在尋找一種不同的方式,以便計算也能以快速的方式進行。我仍然在Java中找到自己的腳,所以任何關於這方面的指示或建議都會有很大的幫助。Java - 計算大型數學表達式

問候 p1nG

+0

有點相關: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

+8

你好嗎知道BigInteger不是「快速」嗎? – 2009-12-23 14:42:38

+1

@ping:快速的方式不是一個可測量的要求(例如,你是否需要在少於1毫秒內完成計算)你試過BigInteger並且認爲它太慢? – Alon 2009-12-23 14:58:49

回答

5

既然你說你是Java新手,我會建議你使用BigInteger和BigDecimal的,除非你想編寫自己的任意大量的處理程序。 BigInteger和BigDecimal對於它們的大部分用途來說足夠快。我唯一遇到速度問題的時候是處理一百萬位數字的數字。

這是除非你有一個特定的需要不使用BigInteger。

+0

@all:謝謝你的回覆。我曾嘗試過BigInteger,而我遇到的問題是當我嘗試計算一個像「7 + 3」這樣的字符串,然後將結果存儲在BigInteger中時,它會引發NumberFormat異常。任何關於這可以如何工作的指針? – ping 2009-12-24 16:24:53

+3

你想要的是BigInteger(「7」)。add(BigInteger(「3」)) – 2010-01-03 23:00:01

11

嘗試使用BigInteger,通過一些測試計算來分析結果,並在您尋找更優化的東西之前查看它是否適用於您。

1

首先正確編寫程序(使用BigFoo),然後確定優化是否合適。

1

BigInteger/BigFloat將是您可能獲得的最優化的廣義數學實現。

如果你想要它更快,你可以編寫程序集來使用位移專業數學(好吧,像2除以往往是一個簡單的右移),但如果你做的不止一個幾種不同類型的方程,這將是非常不切實際的。

BigInteger與int相比只是很慢,但它可能是最好的,你可能會獲得超過64位左右的數據操作,而無需使用另一種語言 - 即使這樣你可能會贏得「T得到多大的改善,除非其他語言彙編...

0

我驚訝的是,與1000個數字方程有一個實際的應用(也許除了加密) 難道你能解釋一下你在做什麼,什麼你的速度要求是?