リストHOME  リストOpen Source

第22回VBAプログラム豆知識

概要 ~ 小数 ~

 今回は、先日(数ヶ月前)、私が読んだ雑誌に、面白い記事(CQ出版社の『Interface』2024年4月号)があったので、それについて紹介したいと思います。それは、コンピュータ上で扱われる小数の値に関する記事なのですが、まずは、その記事と同じ内容で少し説明します。


 エクセルを開いて、下図のようにセルA1に数値 0.1 を入力してみてください。

セルA1の設定


 続いて、セルA2に式 = A1 + 0.1 を設定してみてください。

セルA2の設定


 そうすると、当然A2の値は、セルA1の 0.1 に 0.1 が加算されて 0.2 になるかと思います。これと同様に、A2の式をコピーし、A3セルからA100まで、この数式 をコピペします。

セルA3からA100までの設定


 A100には、 0.1 が99回加算されて数値10が表示されます。


 当然といえば、当然の結果なのですが…

 今度は、セルA1からセルA100までに、セルの書式設定で、以下のように小数点以下を14桁表示するように設定してみます。

小数点の書式設定


 すると、

 なっなんと、値が10ではなくなっているでは、あ~りませんか!?

小数点の書式設定


 皆さん、これ何故だか分かりますでしょうか?


 プログラム(コンピュータ)で値を扱うには、変数(メモリやレジスタ)を使用することは、皆さん、ご存知ですよね。この変数、サイズが決まっていて、格納できる値の範囲には限りがあります。


 小数に的を絞ってお話しすると、1÷3の結果は、割り切れず 0.33333333… となり3が延々と続く結果となります。変数のサイズには限りがありますので、このような場合に、計算結果の値をどこかで、捨てざるを得ないわいけです。


 この捨て方なのですが、ある公式に基づいて近似値に変換するという手法がコンピュータでは、採用されています。


  0.33333333… などの無限に続く値だけ、近似値に変換すると言う訳にはいきませんので、0.1や0.2などの有限な小数も、御多聞に漏れなく、近似値に変換されていると言う訳です。


 今回の例では、 0.1 を99回加算しましたが、この 0.1 という値、 0.1 に見えて 0.1 ではないのです。言い換えると、 0.1 に限りなく近い値に変換されてしまっているということです。


 ですので、A100の値が10では、なくなってしまっているのは、何度も、 0.1 が加算されることで、近似値による計算誤差が大きくなっていることが原因です。



参考文献

 今回の内容は以下の雑誌の記事を参考にしています。

CQ出版社の『Interface』2024年4月号
『コンピュータの数、人間の数の落とし穴』矢崎成俊氏


連絡先

 ご意見・ご要望等ありましたら、画面最下部のメールアドレスまでご連絡ください。




エクセルバックアップ・ページのフッター
管理者のメールアドレス