我试图验证一笔金额而且在该程序中我似乎找不到0,是否有错误?
from mpmath import *
mp.dps = 1500
a=mpf(0.1)
p=mpf(2.)
def f1(x):
return (a-(mpf(1)-mp.sqrt(1-x**2)))**p*x
def f2(x):
return x*(x-a)**p
def f3(x):
return x**p
i=mp.quad(f1,[0,mp.sqrt(mpf(1)-mpf(0.9)**mpf(2))])
j=mp.quad(f2,[0,a])
k=mp.quad(f3,[0,a])
print i,j,k
print mp.fabs(i)+mp.fabs(j)-mp.fabs(k)
即使有1500位数字,我也找不到0。
答案 0 :(得分:1)
当您从Python float创建mpf
实例时,您在代码中输入的值首先转换为53位值,然后转换为高精度值。您正在处理的不是您期望的值。
如果您正在使用高精度代码,则应该从字符串或整数初始化。请尝试以下方法:
from mpmath import *
mp.dps = 1500
a=mpf("0.1")
p=mpf(2)
def f1(x):
return (a-(mpf(1)-mp.sqrt(1-x**2)))**p*x
def f2(x):
return x*(x-a)**p
def f3(x):
return x**p
i=mp.quad(f1,[0,mp.sqrt(mpf(1)-mpf("0.9")**mpf(2))])
j=mp.quad(f2,[0,a])
k=mp.quad(f3,[0,a])
print i,j,k
print mp.fabs(i)+mp.fabs(j)-mp.fabs(k)