tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 桁落ち?
投稿日: 2021/07/23(Fri) 15:34
投稿者魔界の仮面弁士
> ありがとうございました。下記で試して見ます。
> testDeciaml = CDec("368.6") - CDec("360")

試す場合、演算途中の式に、Single や Double が一切含まれないようにしてくださいね。
誤差が生じた後で CDec や CCur をかけても遅いので…。


> 8.60000000000002と表示されます。

十進数の『8』は、二進数だと「1001」で表されますよね。
十進数の『0.6』は、二進数だと「.1001100110011001100110011……」という循環小数になります。

そのため『8.6』という値を Single や Double の桁数で表現した場合には、
本来の値よりもわずかに小さい値(または少し大きな値)な「近似値」になってしまいます。

参考情報として、具体的に『8.6』の近似前後値を
Single と Double 型の内部表現で表示してみました。蛇足までに。
https://www.vb-user.net/junk/replySamples/2021.07.23.15.18/Single.8.6.png
https://www.vb-user.net/junk/replySamples/2021.07.23.15.18/Double.8.6.png
https://www.vb-user.net/junk/replySamples/2021.07.23.15.18/Double.8.6_full.png

併せてこちらのツールも紹介しておきます。
https://tools.m-bsys.com/calculators/ieee754.php

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。