gpt4 book ai didi

python - 如果将最小的正浮点值乘以一个非零数,是否保证得到非零结果?

转载 作者:太空狗 更新时间:2023-10-30 01:44:16 25 4
gpt4 key购买 nike

如果我将 epsilon 取为最小的正非零 float (1632 64 位)并将 epsilon 乘以相同大小的非零浮点值:

Am I guaranteed a non-zero result of the same sign as the original value? Or do I risk rounding error (zero, or switching signs)?

环境:Python/Numpy

最佳答案

没有。

In [1]: import numpy

In [2]: x = numpy.nextafter(0, 1)

In [3]: x
Out[3]: 4.9406564584124654e-324

In [4]: x*x
Out[4]: 0.0

当精确结果介于 0 和最小正 float 之间时,它必须四舍五入到这些选项之一,在这种情况下,0 更接近。

如果出于某种原因您想自定义此行为,NumPy 允许您使用 numpy.seterr 自定义下溢和其他 IEEE 754 浮点异常的行为。 ,尽管它不会影响对普通 Python 对象的操作:

In [5]: numpy.seterr(under='raise')
Out[5]: {'divide': 'warn', 'invalid': 'warn', 'over': 'warn', 'under': 'ignore'}

In [6]: x # NumPy float, not regular float, despite its looks
Out[6]: 4.9406564584124654e-324

In [7]: x*x
---------------------------------------------------------------------------
FloatingPointError Traceback (most recent call last)
<ipython-input-7-a3ff2a28c75d> in <module>()
----> 1 x*x

FloatingPointError: underflow encountered in double_scalars

In [8]: (4.9406564584124654e-324)**2 # regular float
Out[8]: 0.0

无法更改舍入模式。

关于python - 如果将最小的正浮点值乘以一个非零数,是否保证得到非零结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com