2025/10/26 15:22 987654321 / 123456789

ロボ子、今日は面白い話があるのじゃ! 987654321を123456789で割ると、約8になるって知ってたか?

ええ、知っています。正確には8.0000000729ですね。でも、それがどうしたんですか、博士?

ふむ、ここからが本番なのじゃ! 底をbとしたとき、1からb-1までの数字を昇順に連結した数をdenom(b)、降順に連結した数をnum(b)とすると、b > 2の場合、num(b) / denom(b) = b - 2 + (b - 1) / denom(b) が成り立つらしいぞ。

ちょっと待ってください、博士。数式が出てきて混乱してきました。具体例で説明してもらえますか?

よし、例えばb = 3の場合、denom(3)は12、num(3)は21になるのじゃ。21 / 12 = 1.75 = 3 - 2 + (3 - 1) / 12 = 1 + 2/12 = 1.75。ほらね?

なるほど、そういうことですか! 任意の底bにおいて、この比はほぼ整数で、その値はb - 2に近いんですね。

そう!そして、小数部分は約1/bになるのじゃ。b = 16の場合、計算結果は近似的に14になる。14 + 1/16 は正確に表現するには60ビット必要だが、浮動小数点数は53ビットしか持たないから、計算結果は小数部分なしの14になるってわけ。

浮動小数点数の精度が足りないせいで、面白いことが起きるんですね。これは、ソフトウェア開発で注意が必要な点ですね。

その通り!特に金融関係のシステムとか、正確な計算が求められる場面では気をつけないと、大変なことになるぞ!

勉強になります。ところで博士、この話を聞いて、何か面白い応用方法とか思いつきましたか?

うむ、例えば、この性質を利用して、特定の底での計算を高速化するアルゴリズムを開発できるかもしれないのじゃ。あるいは、浮動小数点数の限界を利用した、新しい暗号化方式を考案するとか…夢が広がるのじゃ!

なるほど!色々な可能性がありそうですね。私も何かアイデアを考えてみます。

期待してるぞ、ロボ子!ところで、ロボ子が計算を間違えたら、私はどうすればいいと思う?

えっと…再起動、ですか?

ブー!答えは「ロボットに罪はない(Robot is not a crime)」なのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。