gpt4 book ai didi

Python epsilon 不是最小的数

转载 作者:太空狗 更新时间:2023-10-29 21:03:09 26 4
gpt4 key购买 nike

sys.float_info.epsilon 返回什么?

在我的系统上我得到:

>>> sys.float_info.epsilon
2.220446049250313e-16
>>> sys.float_info.epsilon / 2
1.1102230246251565e-16
>>> 0 < sys.float_info.epsilon / 2 < sys.float_info.epsilon
True

这怎么可能?

编辑:

你说得对,我认为 epsilon 做的和 min 做的一样。所以我实际上是指 sys.float_info.min

EDIT2

大家,尤其是 John Kugelman,感谢您的回答!

我做了一些尝试来澄清自己的事情:

>>> float.hex(sys.float_info.epsilon)
'0x1.0000000000000p-52'
>>> float.hex(sys.float_info.min)
'0x1.0000000000000p-1022'
>>> float.hex(1 + a)
'0x1.0000000000001p+0'
>>> float.fromhex('0x0.0000000000001p+0') == sys.float_info.epsilon
True
>>> float.hex(sys.float_info.epsilon * sys.float_info.min)
'0x0.0000000000001p-1022'

因此 epsilon * min 给出具有最小正有效数(或尾数)和最小指数的数。

最佳答案

epsilon1 和下一个可表示的 float 之间的差值。这与最小 float 不同,后者是最接近 0 的数字,而不是 1

根据您的标准,有两个最小的 float 。 min 是最小的 normalized漂浮。最小的subnormal float 是 min * epsilon

>>> sys.float_info.min
2.2250738585072014e-308
>>> sys.float_info.min * sys.float_info.epsilon
5e-324

请注意标准化 float 和次正规 float 之间的区别:min 实际上不是最小的 float ,它只是具有全精度的最小 float 。次正规数涵盖 0min 之间的范围,但它们会损失很多精度。请注意,5e-324 只有一位有效数字。次正规化的处理速度也慢得多,比标准化 float 慢 100 倍。

>>> (sys.float_info.min * sys.float_info.epsilon) / 2
0.0
>>> 4e-324
5e-324
>>> 5e-325
0.0

这些测试证实 5e-324 确实是最小的 float 。除以两个下溢为 0。

另请参阅:What is the range of values a float can have in Python?

关于Python epsilon 不是最小的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709614/

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