わかっているようでわからないこと

2009年06月01日

25.0 × 8.28 = 207

なのですが、プログラム君はちがうことがある。

たとえばC#では

double a = 25 ;
double b = 8.28 ;
double c = Math.Truncate( a * b ) ; ← 整数部分とりだし関数

とすると C=206となる。

なんとなくわかっているけれど、
大量のソースコードの中で、これでおかしくなっているのを
見つけるのは容易ではない。

そんな今日このごろでした。


Posted by いちごソフト開発 at 00:18│Comments(2)
この記事へのコメント
C#は使っていませんがコレを見つけるのは大変そうですね。
ビットの演算ですから、誤差は避けられませんね。

PHPですが数ヶ月前に32ビット環境で掛け算の処理結果でドジをしました。
2変数の掛け算の結果が端数を含むため、intval()を通して整数値を取得するようにしていたのですが、演算結果が32ビットで収まらないため、結果が見事にマイナスになっていました。
有限なビットの世界で動いていることを思い出した瞬間でした。
Posted by 植物お世話係植物お世話係 at 2009年06月06日 19:29
植物さん

とくにC#というわけではないです。
今回はC++/CLIでした。
ビットの世界は難しいですね。
Posted by いちごソフト開発いちごソフト開発 at 2009年06月07日 01:09
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
わかっているようでわからないこと
    コメント(2)