コンピュータにおける数値計算の実像

コンピュータに計算をさせるとき、つい彼らが十進数を難なく扱っているように感じてしまう。しかし、彼らは二進数しか触ることができない。 そこで、こうしたことが起こる。

Haruhiko Okumura @h_okumura

Excelで =1.001*1000-1001 を計算すると 0 になる。でも計算式を ( ) で囲めば…

午前11:10 ・ 2022年8月1日1

Haruhiko Okumura @h_okumura

-1.13×10^{-13} が2進浮動小数点数の本来の値。Excelは事務計算用なので10進でキリの良い値に丸めるが、かっこで囲むと丸めない

午前11:23 ・ 2022年8月1日2

変換・計算を提供しているウェブサイト3で調べると、次のようになる。

  • 符号付 64 bit
  • 十進数
    1.001
  • 二進数
    0000 0001 . 0000 0000 0100 0001 1000 1001 0011 0111 0100 1011 1100 0110 1010 0111
  • 求めた二進数から十進数に再計算すると
    1.00099999999999998701039061188566847704350948333740234375

これは、十進数で有限小数であっても他の進数では有限小数とは限らないことから生じる。このことは忘れられがちである。とくに、「彼らが使えるようになること」への指導に力を注ぐとなおのことである。私も、かつて情報を教えたとき、ここまで気が回らなかった。

しかし、浅薄な使いかたなどは必要に迫られればいつでも自ずと学ぶ。足下こそ、学校で触れなければ知らないままになってしまうやもしれない。

次の記事もよい4


  1. 奥村晴彦,(Twitter)。Twitter,参照 2022-08-02。 ↩︎

  2. 奥村晴彦,(Twitter)。Twitter,参照 2022-08-02。 ↩︎

  3. 株式会社シーマン,2進数⇔8進数⇔10進数⇔16進数 計算(マイナス,小数点対応)。WEB便利ノート,参照 2022-08-02。 ↩︎

  4. 追記 2022-08-08。ここから終わりまで。 ↩︎

  5. 奥村晴彦,十進多倍長計算。okumuralab.org,参照 2022-08-08。 ↩︎