| PHP に限った問題ではないが、コンピュータ・プログラムは内部で 2進数演算しているため、10進数の計算と比べると誤差が発生することがある。そこで今回は、演算誤差の具体事例と対策を考えていく。 |
サンプル・プログラム |
|
サンプル・プログラムの解説 |
|
|
0001: <?php |
|
|
プログラムを実行すると、11行目の演算結果は 0.333333....(循環小数)となるため、結果は切り捨てになってしまう。これは表現上の問題なのでやむを得ない。商に 3 を乗算してやれば、1 に戻るので(13行目)、演算誤差はないといえる。
ところが、単純な乗算プログラムなのに演算誤差が発生するケースがある。19行目がそれである。期待する結果は 702100 であるはずなのに、702099 と表示されてしまう。 だが、奇妙なことに、printf 関数の %f 修飾子(小数表示)を利用すると、702100.000000 と表示される。 整数化の際に誤差が発生しているのだ。 |
(
この項つづく)
|
|
|
|
|
2006年12月09日 作成
2009年06月27日 更新
Copyright by studio pahoo, (C)2009
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 ★本ページへのご意見・ご質問・お便りは、ここをクリックしてください。 |