【发布时间】:2011-01-18 21:59:24
【问题描述】:
有没有办法在 PHP 中获取浮点数的二进制表示?类似于 Java 的 Double.doubleToRawLongBits()。
给定一个正浮点数,我想获得小于该数的最大可表示浮点数。在 Java 中,我可以这样做:
double x = Double.longBitsToDouble(Double.doubleToRawLongBits(d) - 1);
但我在 PHP 中没有看到类似的东西。
【问题讨论】:
-
我很确定你的 Java 代码有问题。当只设置低位时会发生什么?我怀疑忽略指数不起作用......或者当你从指数 0 到 -1 时,你会破坏 NaN 等位吗?
-
@derobert:如果您发现我的 Java 代码无法正常工作,除了 ±0、±Inf 或 NaN,请告诉我(负值会使最小值更大比给定值)。正 IEEE 浮点数在转换为整数时会进行排序。 (并且负值是反向排序的)。指数存储为带有偏移量的无符号值,而不是二进制补码,因此 -1 确实比 0 小 1。如果仅设置了低位,您将看到 Double.MIN_VALUE 的等价物,减一得到 0 ,这是正确的答案。
-
一篇非常好的文章可以在这里找到:cygnus-software.com/papers/comparingfloats/comparingfloats.htm
-
感谢您的解释和教育,这听起来确实有效。此外,您应该将代码放入答案中。回答你自己的问题没有错。
-
@derobert - 好的,我将我的解决方案移到了答案中
标签: php floating-point numerical-methods