2016-11-13 4 views
0

合計を確認しようとしていますが、そのプログラムでは正確に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) 

も、あなたはPythonのfloat型からmpfインスタンスを作成するとき、私は正確に0

+2

[関連する読解](http://stackoverflow.com/q/588004/440558)。 –

+0

このコードが何をすべきか、あなたの実際の質問は何かを理解するのはちょっと難しいです – ForceBru

+0

なぜそれはちょうど0であるべきですか? – Arnial

答えて

1

を見つけることができません。1500の数字で、あなたのコードに入力した値は、最初の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) 
関連する問題