我正在尝试绘制对数函数: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)
:
[ 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()
,但我得到的结果与上面完全相同。
有什么想法吗?
非常感谢!
答案 0 :(得分: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,
1.0,
1.0]