Help us understand the problem. What is going on with this article?

10⁹⁹⁴²⁰⁶⁷ は 8 桁である

この記事は下記の記事の続編ともいうべきものです。
桁数は Math.log10(x).floor + 1 でいいのか - Qiita

さて,$10^{9942067}$ は 10 進で何桁の数だろうか1

Ruby なら簡単さ。

irb(main):001:0> (10 ** 9942067).to_s.length
(irb):1: warning: in a**b, b may be too big
=> 8

え? は,8 桁ぁ? ど,どういうこと?

しかも何か変な警告が出てるし。つか,この警告がヒントか。要するにデカすぎてちゃんと計算できてないってこと? でもエラーじゃないしな。

いっそ .to_s.length を取って実行してみるか。
いや待てよ,もし巨大整数が表示されようとしたらターミナルがしばらく操作不能になりそうだしな。
えーい,やっちまえ。

irb(main):001:0> 10 ** 9942067
(irb):1: warning: in a**b, b may be too big
=> Infinity

へ? Float::INFINITY ってこと?
整数の整数乗なのに「浮動小数点数の正の無限大」になると?

あの,もしかして答えの「8」って,Infinity の文字数ですかい?

irb(main):002:0> Float::INFINITY.to_s
=> "Infinity"

やっぱし。

ちなみに,指数が 1 小さい $10^{9942066}$ は 10 ** 9942066 で計算できる。
このあたり,Ruby のバージョンにもよるそう。この記事は Ruby 2.7.1 に基づいている。

** は,結果が巨大すぎる整数になりそうなとき,計算を放棄して警告を出したうえで Float::INFINITY を返す,という仕様だそうです。
なので,実際的なプログラムで本当にそんな事態が起こりそうなときは,計算結果を finite? で確認したうえで使う必要がありそう。

なお,$10^{9942067}$ を本当に計算したければ 10 ** 9942066 * 10 で計算できる。


  1. もちろん計算するまでもなく 9942068 桁である。 

scivola
主に Ruby 使ってます。 二十年来のコンパイラー恐怖症が Rust で治癒するか?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした