Python / C ++ - 精度差异

时间:2012-03-28 08:09:29

标签: c++ python precision scientific-computing

优化后,我在Python和C ++中用最佳参数计算残差。结果差距巨大。以下是我如何更准确地进行:

我根据Python中的参数模型生成数据。我将X和Y存储在Excel文件中。我在我的C ++程序中加载此文件并运行优化。我想出了最佳参数,这些参数与用于生成序列的参数非常接近。然后我用Python和C ++计算残差(Y和模型输出之间的平方差的最佳参数)。结果是巨大的,对于参数变化非常敏感的模型,差异高达10 ^ 3。这些差异可以归结为处理Python和C ++中的精度的不同方式,还是可能出现其他问题?一旦优化完成,残差计算就是一个简单的计算,我想知道如果不是精确问题,问题可能在哪里。

非常感谢任何建议或参考。

编辑---我可以很容易地显示用于生成数据和计算残差平方和的Python代码,但不能显示C ++代码,因为计算是通过解释器执行的。感谢您的任何意见。

P1 =  5.21
P2 = 0.22

X_= list(range(0,100,1))
X=[float(x)/float(10) for x in X_]
Y = [P1*numpy.exp(-1*P2*x) for x in X]

##plt.plot(X,Y)
##plt.show()

##for j in range(len(Y)):
##    Y[j]+=rg.normal(0,0.01)

#build some input files
X1f = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1X.txt', 'w')
for i in range(len(X)):
     X1f.write(str(X[i])+'\n')
X1f.close()

Yf = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1Y.txt', 'w')
for i in range(len(Y)):
    Yf.write(str(Y[i])+'\n')
Yf.close()


def func_exp_1(param, x1, y):
   p1, p2 = param
   res = sum((y_i - p1*numpy.exp(-1*p2*x))**2 for x1_i, y_i in zip(x1, y))
   return res
print func_exp_1([5.2132,0.2202],x1,y)

1 个答案:

答案 0 :(得分:4)

Python和C ++都使用机器本机格式; Python的float是 相当于C ++的double。任何差异 可能是由于算法实现方式的不同, ,如果硬件具有用于的扩展格式 中间值(英特尔的情况),语言的时间和地点 将值存储回内存值可能会存储到 在Python中比在C ++中更常使用内存。没有看到确切的代码, 不可能多说(但是大量元素的总和 根据顺序和相对大小,可能会显着偏离 元素)。