我正在使用以下代码绘制函数。
from __future__ import division
from scipy.misc import comb
import matplotlib.pyplot as plt
import numpy as np
N = 100
X = np.arange(2,N)
def k_loop(w,n):
K = np.arange(0, w+1)
return (comb(w,K)*(comb(w,K)/2**w)**(3*float(n)/np.log(n))).sum()
def w_loop(n):
v = [comb(n,w)*k_loop(w,n) for w in range(1,n+1)]
return sum(v)
Y = [w_loop(n) for n in X]
plt.plot(X,Y)
plt.show()
但是我想确保没有数字错误。 get python是否可以精确地进行计算,并且在绘图的最后一刻只能转换为浮点数?日志可能不准确,但我希望尽可能长时间保持其他所有内容。
答案 0 :(得分:4)
如果您希望计算与基数为10的数字尽可能准确,请尝试使用decimal模块。
但这需要重写代码。
decimal
具有ln
和log10
个函数以及power
函数。comb
重写decimal
,或使用exact=True
并将结果转换为decimal
。