用Python实现对数函数的精度

用Python实现对数函数的精度,python,precision,Python,Precision,我试图绘制对数函数:x*log(1+1/x)用于非常大的x值。我已经检查了几个术语,因为整体绘图不好,问题似乎是,尽管此函数不应大于1,但对于某些点,它会大于1。我相信这与对数函数的准确性有关 对于以下x值: [ 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.606907

我试图绘制对数函数:
x*log(1+1/x)
用于非常大的x值。我已经检查了几个术语,因为整体绘图不好,问题似乎是,尽管此函数不应大于1,但对于某些点,它会大于1。我相信这与对数函数的准确性有关

对于以下x值:

[ 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)
,我得到:

如你所见,第7项大于1

我尝试过使用
log1p
来代替,但这会给出非理性的答案

我也尝试过使用
np.float128()
,但得到的结果与上面完全相同

有什么想法吗


非常感谢

阅读
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.9999999999805,
0.99999999998422,
0.9999999999888,
0.99999999999992,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0]


您使用
log1p
尝试了什么?它应该能够给出正确的结果。嗨,非常感谢!是的,这似乎奏效了,我觉得自己很愚蠢。然而,即使使用np.float128,我也得到了全部1.0。“你知道为什么吗?”安德烈很乐意帮忙。没有必要感到愚蠢;所有的程序员都会时不时地犯这种错误。对于浮点输出,Numpy默认为8位精度,因此您看到的不是实际的结果:)数字被四舍五入到1.0。尝试使用
np.set\u printpoptions(精度=20)
更改Numpy的默认值,或者以其他方式打印。太棒了!谢谢!
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]