- ベストアンサー
[bash] bcコマンドが扱える最大値は?
22桁くらいの整数は扱えるのは確認できましたが実際はどのくらいまで扱えるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>INT_MAXというのが知れべても良く解らなかったのですが C言語のint型で表せる最大の整数値です。具体的な値は環境によって違いますが、int型が32ビット幅でINT_MAXが2147483647(=2^31-1)である場合が多いでしょう。 Linuxであれば/usr/include/limits.hというファイルにINT_MAXの定義があると思います。 #define INT_MAX 2147483647
その他の回答 (3)
- akira1720
- ベストアンサー率80% (128/159)
ほんとだ。_kappe_ さんのおっしゃるとおり、小数点より上の桁数、下の桁数がそれぞれ INT_MAX に制限されている、とちゃんと man に書いてありますね。失礼しました。
- akira1720
- ベストアンサー率80% (128/159)
すみません、ソースコードをみたわけではなくて man ページに書いてあることから推測なのですが、 bc では数値を十進数として扱っています。よくコンピュータで数値の範囲や桁数に制限があるのは、パフォーマンスを上げるため、CPU が直接計算したり入出力したりできる形式にあてはめているからですが、bc の場合は多分人間が筆算で計算するように、数値を十進数としてメモリに保存して、ひと桁ずつ計算しているようです。なので、数値の上限はその環境で利用できるメモリの量か、あるいはプログラム中で設定している制限によると思われます。いずれにせよ、通常コンピュータで扱える数値よりはるかに多い桁数を十進数で正確に計算できます。 ちなみに私の環境では 2^1000000 に対して1秒ほどで答えを返しました。桁数はおそらく30万桁ほど。 2^10000000 では数分待ちましたが、結果が返ってきました。桁数は300万桁。そのときのメモリ消費はおそらく数MB程度。 これ以上のテストは CPU への負荷が大きいのでやめました。(CPU への負荷が小さく効率よく大きな桁数を作る計算式があればもっとやれるかもしれません。) このことから、プログラムで明示的に桁数を制限していなさそうということと、今の PC のメモリをいっぱいにするような巨大な計算は(単純な計算式では)難しいということがわかりました。
お礼
回答ありがとうございます わざわざ検証していただきありがとうございました INT_MAXの値が不明なのでそのあたりもよろしければ教えていただけますでしょうか?
- _kappe_
- ベストアンサー率68% (1583/2308)
100万桁だって扱えますよ。 例 10^999999 + 123 マニュアルには「小数点より上の桁数もINT_MAX桁に制限されています」と書かれているので、十分な量のメモリがあれば仕様上2147483647桁まで行けるはずです。 https://linuxjm.osdn.jp/html/GNU_bc/man1/bc.1.html
お礼
回答ありがとうございます 提示していただいたサイトは私もみたのですがINT_MAXというのが知れべても良く解らなかったのですが 64bit環境では9223372036854775807桁もしくはその2倍の18446744073709551616桁ということでしょうか? 私の環境では-2^63〜2^63-1までは正常に出力されます 実際にこんな桁を使うことは無いのですが(汗
お礼
再度の回答ありがとうございます macOSXでして/usr/include/limits.hは見つけられなかったのですが C言語でインクルードして確認したら2147483647と出ました