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

コンピュータに計算をさせるとき,ついつい私たちは彼らが十進数の計算を難なく行っているように感じてしまう。しかし当然ながら,本来彼らは二進数を取り扱っている。 そこで,こうした事態が起こる。

Excelで =1.001*1000-1001 を計算すると 0 になる。でも計算式を ( ) で囲めば…
午前11:10 ・ 2022年8月1日1

-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。 ↩︎