プログラムをしているとはまる浮動小数点の計算。
PHPで書くとこうなる。
<?php $n = (0.1 + 0.7); printf("%fn", $n); $n = $n * 10; printf("%fn", $n); printf("%fn", floor($n)); ?>
出力は順に
0.800000 8.000000 7.000000
floorは切り捨てなので、正しくは8にならなければならないところ、
7になってしまいます。
小数点を正しく計算するには、任意精度数学関数か、gmp関数を使用する必要があります。
<?php $n = bcadd(0.1, 0.7, 4); $n = bcmul($n, 10, 4); printf("%fn", floor($n)); ?>
出力は、8.000000 になります。
ちなみに
<?php $n = (1 + 7) / 10; $n = $n * 10; printf("%fn", floor($n)); ?>
としても出力は8になります。
The following two tabs change content below.
taira
Sofrware Engineer.
最新記事 by taira (全て見る)
- 翻訳リソースファイル(.po)をXLIFF形式(.xlf)に変換する - 2014年6月27日
- 一杯のラーメン - 2014年6月26日
- Macで翻訳ファイル*.poをmo形式に変換する - 2014年6月4日
Comments are closed.