fmod 返回不正确的结果

fmod returning incorrect result

为什么 PHP 的 fmod 函数无法正常工作。我错过了什么吗?

fmod(2.0, 0.1); // outputs 0.1

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

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

这里的关键是 fmod 确实 做了它应该做的事情,给定实际输入 2.0 和 0.1000000000000000055511151231257827021181583404541015625。无法准确表示 0.1 是二进制浮点数的一个众所周知的结果。