• ベストアンサー

BigDecimal

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

  • Java
  • 回答数1
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • 浮動小数点数の内部表現について教えてください

    float型の内部表現を表示するプログラムを書いていくつか試してみたのですが、どこからどこまでが仮数部でどこからどこまでが指数部なのか良くわかりません。 曲がりなりにも自分で考えた結果は次のとおりです。 10進表示: 内部表現 ;2進の指数表現 2 :01000000000000000000000000000000;10.0*10^0 4 :01000000100000000000000000000000;10.0*10^1 8 :01000001000000000000000000000000;10.0*10^10 16:01000001100000000000000000000000;10.0*10^11 32:01000010000000000000000000000000;10.0*10^100 また、 1 :00111111100000000000000000000000;0.1111111*10^0 0.5 :00111111000000000000000000000000;0.0111111*10^0 0.25:00111110100000000000000000000000;? 0.125:00111110000000000000000000000000;? 0.0625:00111101100000000000000000000000;? となりました。最上位ビットが符号だということは分かります。 質問をまとめると、 (1) 10進で 0.5 の2進指数表現は 0.0111111*10^0 ということなのでしょうか。もしそれで正解なら、どうして 0.1*10^0 としないでわざわざ丸め誤差を含む無限小数で表すのでしょうか。 (2) 仮数部と指数部のビットは決められていなくて、例えば状況によって仮数部のビットが少なくなり指数部のビットが多くなったりするのでしょうか。 (3)仮数部での小数点はどこにあるのでしょうか。 (4)float 型の小数精度は最小6桁ということですが、これは10進で6桁なのか2進で6桁なのか教えてください。 どれか一つでも教えていただけると助かります。 使ったコンパイラは Borland C++ Compiler 5.5 です。 }

  • 変位指数表現・・・

    わからない問題があるので教えてください。 仮数部を2進数10桁の符号絶対値表現とし、 指数部を2進数6桁の変位指数表現としたときの値域を求めなさい。 という問題なのですが、よくわかりません。 自分なりにとりあえず最大値最小値を考えてみましたが…。 仮数部 ・最大 0111111111 (→ +511) ・最小 1111111111 (→ -511) 指数部 ・最大 011111 (→ +31) ・最小 111111 (→ -31) 符号絶対値表現ということは、こういった書き方でいいのでしょうか…。 2の補数を使って負の数を表現するやり方は、ここでは関係ないのでしょうか? 値域の求め方もわかりません。 どなたか教えて頂けるとありがたいです。

  • リファレンスを用いた記述について

    仮に、リファレンス値を「$hoge」とします。 通常、このリファレンスの値を参照する場合、 $$hoge とすれば取得できるかと思います。 とある参考書をみていたところ、 @{$hoge} にてリファレンス値を取得との記述がありました。 (例文:push @work,@{$hoge}) どうして、@をつけてリファレンスの指す値を取得するのか 理解できません。 リファレンスについて混乱しつつあるので、回答よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 128ビットの浮動小数点型

    だれかUNIXのgcc上での128ビットlong doubleの内部記録方式を調べた方いらっしゃいませんか? 仮数部に何ビットとか。

  • Contax T3 について ダブルティース

    心優しい方是非お教えください。 Contax T3 フィルムカメラを所持しており、海外の知人が欲しいと言っています。 すると、そのContax T3はdouble teethですか?”という質問されました。 このダブルティースとは何の事なのでしょう? 日本語でも同じようにダブルティースというのかも分かりません。 製造年〇〇年以降の仕様とかカメラ内部の部品? 見た目から明らかに分かるものなのでしょうか? お教えいただけますでしょうか? 宜しくお願い致します。

  • EXCEL VBAで違うファイルを参照したいです

    EXCEL VBAで困ってます アクティブなシートのセル番地"B1"に"外部"と値が入力されていて 同じアクティブなシートのセル番地"B2"に"仕様"と値が入力されています これをネットワーク先にあるエクセルファイルの中に該当する値が入力されているか を調べたいのですが、ロジックをどう書けば良いのかわかりませんので教えてください 例えばネットワーク先のファイルは仮に以下とします \\EXCEL\VBA\MACRO\Reference.xls このファイル内に上記の値が格納されています ただ、外部については"内部/外部"と入力されており、"仕様"は同じです ですので完全一致と部分一致(?)で比較をし、それぞれ"C1""C2"に合致すれば"○"、 無いもしく違えば"×"と値を返したいのです 尚且つ、ファイル内を指定するだけで、セル番地やシート名まで指定せずに比較したいのです どうかご教授頂きますようお願い致します

  • Excelで文字列12-34を12-0034に変換

    お世話になります。 2つの表(仮にA表、B表とします)があり、 A表には、12-0034、56-0789 のように 2桁ハイフン4桁 で入力されており、 B表には、12-34、56-789 のように、ハイフン以降の頭のゼロを省略して入力されています。 A表の 12-0034 に相当するB表の 12-34 をVLOOKUPで拾いたいのですが、どうするのが良いでしょうか? B表の 12-34 を 12-0034 に、56-789 を 56-0789 に桁合わせして変換することが可能なら、B表のデータを一旦変換してからVLOOKUPしようと思うのですが、上手い方法が分かりません。 御教示下さいますようお願い致します。

  • doubleとfloatについて

    #include <stdio.h> int main() { float height,weight; printf("身長と体重を入力してください。\n"); scanf("%f",&height); scanf("%f",&weight); printf("身長は%fセンチ:体重は%fキロです。\n",height,weight); return 0; } 上記のようなプログラムを作って、身長には175.1体重には56.1という入力を行なって実行したところ、 身長は175.100006センチ:体重は56.099998キロです。 という結果が返ってきました。 heightとweightをdouble型で宣言したところ(もちろんscanf文の変換仕様は%lfにしています。)、結果は 身長は175.100000センチ:体重は56.100000キロです。 と私が、期待していたものが返ってきました。なぜfloat型だと期待通りの結果が返ってこないのでしょうか?ご教授お願い致します。

  • 頭のてっぺんを押した時の違和感

    ち2週間前から音響外傷により、プレドニンというステロイド剤を服用しています。 (最大60mg) 最近になってから、頭のてっぺんを押すと、のどの奥の方が下に垂れる感じの違和感を感じます。 実は、押さなくてものどの奥で下にゆっくり引っ張られるような違和感があるのですが、 脳の押すとその違和感が強くなります。 また、音響外傷になってから、 耳の奥の方から後頭部にかけて押されているような痛みもがあり、 プレドニンを服用してから、目が疲れ易くなった感じがあります。 のどの奥の違和感は、脳のてっぺんと繋がっているのでしょうか? また、プレドニンというステロイドは、そのような副作用があるのでしょうか? よろしくお願いします。

  • パワーアンプのW数と最大SPLについて

    よろしくお願いします 現在パワードミキサーの購入を検討しています スピーカーはヤマハステージパス300のスピーカー部を使用します(アンプ部故障のため) 候補として同じヤマハのEMX212sか一つ上のEMx312scにしようかと思います ステージパスのスピーカーは6Ωなので4Ωで200W×2のEMX212sにつないだ場合大体ステージパス300と同じくらいの出力になるかと思うんですが、4Ωで300W×2のEMX312scにつないだ場合最大出力音圧SPLは上がりますか? それともステージパス300の仕様で最大出力音圧112dbと明記されてる以上 それ以上に上がらないのでしょうか? またサウンドハウスの各SRスピーカーの仕様にも最大SPLが書いてありますが その最大SPLを出すためのアンプのW数は計算式かなんかあるのですか? EMX212s http://www.soundhouse.co.jp/shop/ProductDetail.asp?Item=814%5EEMX212SC%5E%5E EMX312sc http://www.soundhouse.co.jp/shop/ProductDetail.asp?Item=814%5EEMX312SC%5E%5E ステージパス300 http://www2.yamaha.co.jp/manual/pdf/pa/japan/mixers/stagepas300_ja_om_e0.pdf 知識をご教授ください