fmod返回错误的结果

时间:2015-10-07 15:14:21

标签: php floating-point fmod

为什么PHP的fmod功能不能按预期工作。我错过了什么吗?

fmod(2.0, 0.1); // outputs 0.1

以下应该输出0,因为2.0 / 0.1 = 20,因此没有余数。我知道浮点数学错误,但是这个函数专门用于浮点数,所以我不确定为什么会返回错误的结果。

1 个答案:

答案 0 :(得分:2)

最接近的IEEE 754 64位二进制数为0.1是0.1000000000000000055511151231257827021181583404541015625。大于2.0的20倍。其次是19次,余数为0.0999999999999998667732370449812151491641998291015625。根据您打印剩余部分的方式,它可能会显示为“0.1”。

根据实际输入2.0和0.1000000000000000055511151231257827021181583404541015625,这里的关键是fmod 完全它应该做什么。无法准确表示0.1是二进制浮点的众所周知的结果。