Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获得最后位置的单位(ULP)_Php_Math - Fatal编程技术网

如何在PHP中获得最后位置的单位(ULP)

如何在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。您可以使用它来测试微小的

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。您可以使用它来测试微小的差异

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