提问人:Xilexio 提问时间:6/26/2022 最后编辑:Xilexio 更新时间:6/26/2022 访问量:321
Python 3(使用 IEEE-754)中浮点数的 17 位十进制表示是否总是“精确”到数值精度?
Is 17-digit decimal representation of float in Python 3 (using IEEE-754) always "exact" up to numerical accuracy?
问:
对于使用 IEEE-754 浮点数的 CPython 3.10 或更高版本中从 0 到 1 的所有浮点数 r
,是否符合以下情况?
float('%.17g' % r) == r
换句话说,从 0 到 1 的浮点数的 17 位十进制表示是否足够准确,足以等于它们的二进制对应物?
我的猜想是 17 位数字(但不是 16 位)是正确的,因为我还没有找到以下程序的反例:
import random
def check(precision=17):
r = random.random()
d = float(f'%.{precision}g' % r) - r
if d != 0:
print(d)
for i in range(1000000000):
check(17)
但是,这并不涵盖所有情况,因此我正在寻找基于理论的答案。
根据答案,我正在寻找以下问题的答案:
- 所有浮点数都是这样吗?
- 如果猜想对 17 位数字不成立,那么对更多数字是否成立?
- 如果猜想不正确,至少每个猜想都是独一无二的吗?
float('%.17f' % r)
答: 暂无答案
评论
float("%.17g" % x) == x
True
x
(0, 1)
dtoa.c
dtoa.c