コンピュータにおける数値計算の実像
- 追記: 2022-08-08
- 十進多倍長計算へのリンクを追加した。
コンピュータに計算をさせるとき、つい彼らが十進数を難なく扱っているように感じてしまう。しかし、彼らは二進数しか触ることができない。 そこで、こうしたことが起こる。
Haruhiko Okumura @h_okumura
Excelで =1.001*1000-1001 を計算すると 0 になる。でも計算式を ( ) で囲めば…
午前11:10 ・ 2022年8月1日[^okumura1]
Haruhiko Okumura @h_okumura
-1.13×10^{-13} が2進浮動小数点数の本来の値。Excelは事務計算用なので10進でキリの良い値に丸めるが、かっこで囲むと丸めない
午前11:23 ・ 2022年8月1日[^okumura2]
- https://twitter.com/h_okumura/status/1553929430992449536
- 奥村晴彦
- 参照 2022-08-02
変換・計算を提供しているウェブサイトで調べると、次のようになる。
- 符号付 64 bit
- 十進数
1.001 - 二進数
0000 0001 . 0000 0000 0100 0001 1000 1001 0011 0111 0100 1011 1100 0110 1010 0111 - 求めた二進数から十進数に再計算すると
1.00099999999999998701039061188566847704350948333740234375
- https://note.cman.jp/convert/bit/
- 株式会社シーマン
- 2進数⇔8進数⇔10進数⇔16進数 計算(マイナス,小数点対応)
- WEB便利ノート
- 参照 2022-08-02
これは、十進数で有限小数であっても他の進数では有限小数とは限らないことから生じる。このことは忘れられがちである。とくに、「彼らが使えるようになること」への指導に力を注ぐとなおのことである。私も、かつて情報を教えたとき、ここまで気が回らなかった。
しかし、浅薄な使いかたなどは必要に迫られればいつでも自ずと学ぶ。足下こそ、学校で触れなければ知らないままになってしまうやもしれない。
次の記事もよい。
- https://okumuralab.org/~okumura/python/decimal.html
- 奥村晴彦
- 十進多倍長計算
- okumuralab.org
- 参照 2022-08-08