用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]