Python 为什么十进制(2**0.5)不';t以预先确定的精度给出数字?
受此启发,我正在做以下工作:Python 为什么十进制(2**0.5)不';t以预先确定的精度给出数字?,python,python-2.7,Python,Python 2.7,受此启发,我正在做以下工作: 为什么Decimal(2**0.5)不是1000位长?将2**0.5计算为float,然后转换为Decimal。相反,从一开始就使用两个Decimals: >>> from decimal import Decimal, getcontext >>> getcontext().prec = 100 >>> Decimal(2) ** Decimal('0.5') Decimal('1.41421356237309
为什么
Decimal(2**0.5)
不是1000位长?将2**0.5
计算为float
,然后转换为Decimal
。相反,从一开始就使用两个Decimal
s:
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 100
>>> Decimal(2) ** Decimal('0.5')
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
使用
'0.5'
而不是0.5
是很重要的,这样Decimal
就可以自己解释0.5
,而不会从0.5
转换成浮点,然后转换成十进制。(因为0.5
是2**-1
,可能不会有任何精度损失,但最好是安全的,而不是遗憾)。因为2**0.5
不是1000位长。你不允许有浮点幂的十进制
anyway@jamylak:是的,但我提醒大家不要使用Decimal(2)**Decimal(0.5)
,而不是Decimal(2)**0.5
。我刚刚想到了这一点,但是你应该用字符串来写所有的小数,以保持一致IMHO@jamylak:是的,也许吧。我把所有非整数都写在字符串中,但我知道Python不会弄乱我的整数,所以我不引用它们。
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 100
>>> Decimal(2) ** Decimal('0.5')
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')