python - 添加到 numpy.nextafter() float 返回意外结果

标签 python numpy python-2.7 ieee-754

根据 Wolfram Alpha,这对于 x > 2 是正确的。

6.0/(x+16) > 2.0/(x+4)

为了获得尽可能小的 x,我使用了 numpy.nextafter()

>>> from numpy import nextafter
>>> x = nextafter(2,2+1)
>>> x
2.0000000000000004

但是。

>>> 6.0/(x+16) > 2.0/(x+4)
False

奇怪。

>>> x+1
3.0000000000000004
>>> x+4
6.0

那么对于这种情况,我如何获得实际最小的 x > 2

最佳答案

import numpy as np

x = 2.0
while True:
    if 6.0/(x+16) > 2.0/(x+4): break
    x = np.nextafter(x, x+1)   
print(repr(x))

产量

2.0000000000000009

在 CPython 中如何处理 float 取决于底层的 C 库。大多数 C 库实现了 IEEE 754 Standard for Floating-Point Arithmetic .然而,“IEEE 标准不保证相同的程序将在所有符合标准的系统上提供相同的结果。” (参见“每位计算机科学家应了解的浮点运算知识”( PDF ) 和 PEP 754 的第 249 页。

为了能够在不迭代的情况下预测值x,必须研究浮点运算是如何完成的(同上(PDF)),记下x 以其一般的二进制格式,

enter image description here

将其代入不等式

6.0/(x+16) > 2.0/(x+4)

并通过浮点运算算法求解满足不等式的最小 float 对应的数字dᵢ

关于python - 添加到 numpy.nextafter() float 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543291/

相关文章:

python - NumPy 二维数组 : selecting indices in a circle

python - 2D Numpy 数组花式索引 + 掩码

python-2.7 - Pandas 插值返回 NaN

python - 当尝试为 Electrum 编译我自己的独立 exe 时,出现错误

python - 在 Pygame 中使 Sprite 跳跃

python - 绘制对数轴

python - 语音识别引擎超时(python 3.7.4)

python - 为什么 __name__ 在这种情况下不起作用?引发属性错误

python - imshow奇怪的cv2行为

python - CherryPy配置tools.staticdir.root问题