2017-01-28 10 views
1

私は対数関数をプロットしようとしています:xの非常に大きな値の場合はx*log(1+1/x)です。私は全体的なプロットが良くなかったので、私はいくつかの項をチェックしました。問題は、この関数が1よりも高くなることはありませんが、いくつかの点では1より大きくなるはずはないようです。ログ機能。 xの次の値についてPythonでの対数関数の精度

[ 5.4380181e+11 3.1688845e+12 4.5195668e+13 7.4634268e+14 1.2442192e+16 
    2.0754228e+17 3.4624427e+18 5.787843e+19 9.9925409e+20 2.6069079e+22] 

私はx*np.log(1+1/x)のために得る:

[ 0.99999999 0.99999989 0.99999774 0.9999925 0.99959801 0.99007829 
    1.1261964 0.0 0.0 0.0] 

あなたは第7項は、私が使用して試してみました。1.

よりも大きい見ることができるように代わりにlog1pしかしそれは非官能的な答えを与える。

私もnp.float128()を使ってみましたが、上記と全く同じ結果が得られました。

アイデア?

ありがとうございます!

+3

?それは正しい結果を与えることができるはずです。 – kennytm

答えて

2

log1pのマニュアルページをお読みください。 ではなくは、logと同じ引数をとります。私はそれが "非官能的な答え"を説明すると思います。

それは私の作品:

l = [5.4380181e+11, 3.1688845e+12, 4.5195668e+13, 7.4634268e+14, 1.2442192e+16, 2.0754228e+17, 3.4624427e+18, 5.787843e+19, 9.9925409e+20, 2.6069079e+22] 

[n*log1p(1/n) for n in l] 

出力:

[0.9999999999990805、
0.9999999999998422、
0.9999999999999888、
0.9999999999999992、
1.0、
1.0、
1.0 、
1.0、あなたはlog1p` `と試みている何
1.0、
1.0]

+0

こんにちは、ありがとう!はい、今働くようです、私はとても馬鹿だと感じます。しかし、np.float128を使っていても、すべて1.0になります。なぜなのかご存知ですか? –

+0

@Andrés喜んで助けてください。愚かな気分にする必要はありません。すべてのプログラマーがこの種の間違いを随時行っています。 Numpyは浮動小数点出力の精度を8桁にデフォルト設定していますので、実際には何も表示されません:)数値は1.0に切り上げられます。 Numpyのデフォルトを 'np.set_printoptions(precision = 20)'で変更するか、それ以外の方法で印刷してみてください。 –

+0

恐ろしい!どうもありがとう! –