Joa*_*nge 2 python math floating-point
我有这个代码抛出math domain error异常:
v = -1.0
for i in range (201):
print acos (v)
v += 0.01
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改为此,它的工作原理如下:
v = -100
for i in range (201):
print acos (v / 100.0)
v += 1
Run Code Online (Sandbox Code Playgroud)
这是因为四舍五入吗?
如何在Python中最好地解决这个问题?或者我应该像上一个例子那样做?
如果你这样做:
>>> format(0.01, '.30f')
'0.010000000000000000208166817117'
Run Code Online (Sandbox Code Playgroud)
你可以看到0.01(作为双精度的浮点数)大于0.01你在学校学到的数字.
所以,当你总结100次时,误差会变大:
>>> sum([0.01]*100)
1.0000000000000007
Run Code Online (Sandbox Code Playgroud)
这足以给出数学域错误.
你能做什么?
round() 它减少小数点:.
>>> round(1.0000000000000007, 13)
1.0
Run Code Online (Sandbox Code Playgroud)
13或14可能就足够了.