我正在尝试进行计算
使用带有以下代码的python十进制模块:
from decimal import *
getcontext().prec = 9
sum = Decimal(0)
for i in range(1,11):
sum += Decimal(1/(i**4))
print sum
然而,这输出1,而不是像我期望的那样非常小的一部分。我在https://docs.python.org/2/library/decimal.html找不到有关代码错误的信息。我的猜测是sum并没有在循环中用作Decimal,但我不确定如何解决这个问题。
答案 0 :(得分:3)
如果你使用Python 2.x,那么在表达式1/(i**4)
中,使用整数devision作为i=1
的结果,它等于1,而对于所有其他i>1
,它得到0。
只需将浮点数添加到1:1./(i**4)
,这可以解决问题。
PS在Python 3.x中,您的代码应该按预期工作,因为运算符/
是在浮点数上定义的,而运算符//
是为整数定义的。
答案 1 :(得分:2)
首先,不要将sum
用作变量名,因为它是内置的
如果你期望一个float类型的答案,那么它必须提供至少一个用于算术的浮点数,这里:
s = Decimal(0)
for i in range(1,11):
s += Decimal(1./(i**4)) # dividing 1. or 1.0 instead of just 1
print s
这给出了:
1.08203658