Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么十进制(2**0.5)不';t以预先确定的精度给出数字?_Python_Python 2.7 - Fatal编程技术网

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')