• ベストアンサー

BigDecimal

頭が混乱してしまったのですが… ずばりBigDecimalを使用したとき、仮数部は最大何桁になるのでしょうか?BigDecimalの内部仕様まで今まで考えたことがなかったのですが… FLOATやDoubleのどはリファレンスにはっきり明記されているのですが… すみませんどなたか助けてください。お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

BigDecimal の仮数部は BigInteger を使って表わされているので、結局 BigInteger が扱える整数の桁数が問題となるわけですが、リファレンスには特に BigInteger の桁数について言及されていません。 実際、BigInteger のプログラムソースを見ると、 1. BigInteger の値は擬似的な多倍長整数として int 型配列に格納される。 2. int 配列の長さに制限はなく、配列の長さが万が一 Integer.MAX_VALUE を超えた場合に対する例外処理もなされていない。 ということが分かります。 したがって、単純に計算すると、BigInteger が扱える最大の整数は、 2^(32*Integer.MAX_VALUE) - 1 = 2^68719476735 - 1 ≒ 3.7*10^20686623783 となり、約206億桁の整数を扱えることになりますが、実際には 4*68719476735 = 274877906940バイト(256ギガバイト)のメモリが必要になるので、不可能です。 要するに、BigInteger、ひいては BigDecimal に桁数の制限は事実上ないということです。

関連するQ&A