2015-01-16 44 views
-2

如何在Java中使用非常大的數字進行計算。當我說瘋了,我的意思是像8192位整數和浮點數。Java - 用瘋狂的大數來計算

這是可能的,普通64位計算機可以計算的最大值是多少?

+0

[Java浮點高精度庫](http://stackoverflow.com/questions/277309/java-floating-point-high-precision-library) –

+0

在Google中搜索,您會發現BigInteger! –

回答

10

當我說瘋了,我的意思是像8192位整數和浮點數。

這真的沒那麼瘋狂。這不會像你的機器或其他任何東西那樣對內存造成損害。

對於整數使用BigInteger,對於浮點值使用BigDecimal。我不相信「大二進制浮點數」的類型。

正如一種數字的例子你看:

import java.math.BigInteger; 

class Test { 
    public static void main(String[] args) { 
     byte[] bytes = new byte[8192/8]; 
     bytes[0] = 127; 
     System.out.println(new BigInteger(bytes)); 
    } 
} 

輸出:

 
541113332904944621257027340160900091917693549115318562261104546273807066972024025361193585096486923349385062726999774256581849977197274906557009492831443201105551171691244178403919717984227039278443359980180226761679803089497594605997671485724763907145598953406431990173442500426575664262787949112583386253705131668104786750182412791680855944865715259696410188367886612037506345419830856183841501926493918229094077315951142102521296377217539380498798690167426476561663037383738887233213887519273211725579880674800387600568470737270104457912998752875078530446871686526249410822677146900086180880813247518266724528982615032997773901413876848296339184483653166555279106371868396901081861539095911471442610063951293879120365878948439891423650415705034797749122786629924812156703812528640850454060722116295309871801737746764999201088806655284597015419746259510509499349561721654707610989789654471438735169020704030761573632885829361191231553677205472467298253617875576235292510432481272402684906949137107846984996664405910584729193117175984160182199443928924561776902598406361920212049977569423122238936613720193835991801078589862197148943845799227101449150630448578266698756989391702826257605172788293230378218508822387001316270205970944491970492276551254070011941344182057711282913107165296221553726157902456370601394371723685760200355834698473938397945899759397125036210760680478306465830666897406840404024476493134998816143107896676743539769317406617364687861711800984142442948514215249454927820436180492589816736874897449912514943129230209940739231794049768749574548833516764431351090987436249707697734825718908151379544029650456181452943969453122168249071093299640857962065914461325933612617848859243931833842937043427913950964027234614991099243281546044057820429916880334769902849242692796234674560857035410231544279377588197273344847249842671676677537861236399982441213013590542156075455205317955214656111885489459439151729409777140396834780673618790448115444670040022974650543938394323796233646015156947899183947183401173446094248041971411220471893676853128455398177922600837292255766818543666617068690067956364492828867704414948545668364232596008593050588673137731481867410830313713128431917941710625939870646270407030930197645725794246194984570796611923844444224132832526549988639036039442164277785045016465216623043972724482648160510104973400460750404533502159516766838971279926484762092518157058058042524433149400681767325045143455597943916743044982093381632 
+1

我說這是一個瘋狂的大數字:) –

+0

@MarkoTopolnik如果這是「瘋狂的大」,那麼你會打電話給一個有那麼多數字的號碼?或者,怎麼樣,用這麼多數字取一個數字,並將其提高到自己的力量?或者,拿_that_數字和...... IMO「瘋狂的大數字」是瘋狂的數學家們必須發明新的符號以便他們​​甚至可以談論它們的數字。 (http://en.wikipedia.org/wiki/Conway_chained_arrow_notation) –

+0

BigDecimal不是浮點表示。 BigDecimal大部分是固定的,但是在某些操作中程序可以明確要求與給定操作數具有不同比例的結果。如果浮點類似於具有自動變速器,並且BigInteger就像引擎直接連接到車輪,那麼BigDecimal就像是有一個換檔桿。 –

1

是的,這是可能的。利用BigDecimal

例如:

BigDecimal decOne = new BigDecimal("334"); 
BigDecimal decTwo = new BigDecimal("33"); 

BigDecimal result = decOne.subtract(decTwo); 

然後簡單地打印出來。

1

BigInteger(對於整數)和BigDecimal(對於確切的浮點數)是您所需要的。它們只受可用內存的限制。