编程语言
首页 > 编程语言> > python – 添加到numpy.nextafter()float会返回意外的结果

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

作者:互联网

根据Wolfram Alpha的说法,这对于x> 1来说是正确的. 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中如何处理浮点数取决于底层的C库.大多数C库实现了IEEE 754 Standard for Floating-Point Arithmetic.但是,“IEEE标准并不保证相同的程序将在所有符合要求的系统上提供相同的结果.” (参见“每个计算机科学家应该知道浮点算术的内容”(第241页)和第PEP 754页).

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

将此替换为不平等

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

并通过浮点算术算法来求解对应于满足不等式的最小浮点数的数字dᵢ.

标签:python,python-2-7,ieee-754,numpy
来源: https://codeday.me/bug/20190716/1479921.html