这篇文章是关于表达式decimal.Decimal(1.0 / 3.0)中的
significant digits的数量.
由此我认为,decimal.Decimal(1.0 / 3.0)中的有效位数应由操作1.0 / 3.0产生的IEEE 754 double中的有效位数确定.
因此,综合以上所有内容,我希望decimal.Decimal(1.0 / 3.0)最多包含17位有效小数.
但是,似乎decimal.Decimal(1.0 / 3.0)至少有54个有效小数位:
import decimal
print decimal.Decimal(1.0/3.0)
# 0.333333333333333314829616256247390992939472198486328125
所有这些都归结为两个关键问题:
>上面引用的decimal.Decimal文档
>十进制中54(或更多)有效数字.十进制(1.0 / 3.0)
> IEEE 754 double中有效十进制数字的最大值为17.
附录:好的,我现在对情况有了更好的了解,感谢ajcr的回答以及其他一些评论.
在内部,十进制表示1.0 / 3.0作为分数
6004799503160661/18014398509481984
该分数的分母是254.分子是(254-1)/ 3,确切地说.
这部分的十进制表示是完全正确的
0.333333333333333314829616256247390992939472198486328125
附录2:再试一次.浮点数F是不可数的实数集的替代.这组值包括由浮点数F精确表示的有理数Q(F).它还包括Q(F)之上和之下的不可数多个实数值.现在,给定64位IEEE 754 double范围内的实数R,让F(R)成为R在表示为浮