如何在PHP中获得最后位置的单位(ULP)
java中有如何在PHP中获得最后位置的单位(ULP),php,math,Php,Math,java中有Math.ulp(123.456f)我在php中似乎找不到一个等价物。我在寻找浮点精度而不是双精度 令人惊讶的是,在寻找php答案时,有大量关于如何比较浮动的错误建议。我看到的最常见的是 function floatCompare($a,$b) { return (abs($a-$b)<0.001); } 函数floatCompare($a,$b){ return(abs($a-$b)查看我们看到,浮点的尾数中有23位。2^23=8388608。您可以使用它来测试微小的
Math.ulp(123.456f)
我在php中似乎找不到一个等价物。我在寻找浮点精度而不是双精度
令人惊讶的是,在寻找php答案时,有大量关于如何比较浮动的错误建议。我看到的最常见的是
function floatCompare($a,$b) {
return (abs($a-$b)<0.001);
}
函数floatCompare($a,$b){
return(abs($a-$b)查看我们看到,浮点的尾数中有23位。2^23=8388608。您可以使用它来测试微小的差异
abs($a-$b) < abs($a)/8388608
abs($a-$b)
这可能太敏感了,因为它只考虑了一点差异。使用2^20=1048576会有更多的余地。数字必须符合6位有效数字。谢谢你的帮助。我接受了Zéychin的建议,从java库中克隆了ulp函数。我已经用这个函数创建了一个数学库。will ad随着时间的推移,它会越来越多
是的,我总是做第一件事。我搜索了几个不同的字符串,但没有找到。我不知道有什么大不了的。如果需要不同的精度,为什么不使用第三个参数呢?另外,在PHP中,float和double之间没有真正的区别。您可以查看Math.ulp(double d)的源代码
here:然后将其转换为PHP。
abs($a-$b) < abs($a)/8388608