为什么 np.exp(x) 不等于 np.exp(1)**x
why is np.exp(x) not equal to np.exp(1)**x
为什么 np.exp(x) 不等于 np.exp(1)**x?
例如:
np.exp(400)
>>>5.221469689764144e+173
np.exp(1)**400
>>>5.221469689764033e+173
np.exp(400)-np.exp(1)**400
>>>1.1093513018771065e+160
看起来像是四舍五入的问题。在第一种情况下,它在内部使用非常精确的值 e
,而在第二种情况下,您得到的值不太精确,当乘以 400 倍时,精度问题变得更加明显。
使用Windows计算器的实际结果是5.2214696897641439505887630066496e+173
,所以你可以看到第一个结果是好的,而第二个不是。
5.2214696897641439505887630066496e+173 // calculator
5.221469689764144e+173 // exp(400)
5.221469689764033e+173 // exp(1)**400
从您的结果来看,它似乎使用了一个精度为 15 位的值。
2.7182818284590452353602874713527 // e
2.7182818284590450909589085441968 // 400th root of the 2nd result
这是提高差异的 numpy 优化。
确实,你得懂数学how is calculated the Euler number:
e = (1/n)**n
n == inf.
我认为 numpy 会按特定顺序停止:
你在numpy exp documentation这里对欧拉数的计算方式不是很清楚
因为这个阶数不等于无穷大,所以两次计算的差异很小。
实际上值 np.exp(400)
是使用以下公式计算的:(1 + 400/n)**n
>>> (1 + 400/n)**n
5.221642085428121e+173
>>> numpy.exp(400)
5.221469689764144e+173
这里有 n = 1000000000000
非常小,将这个差异提高到 10e-5。
欧拉数确实没有确切的数值。像Pi
,你只能有一个近似值。
为什么 np.exp(x) 不等于 np.exp(1)**x?
例如:
np.exp(400)
>>>5.221469689764144e+173
np.exp(1)**400
>>>5.221469689764033e+173
np.exp(400)-np.exp(1)**400
>>>1.1093513018771065e+160
看起来像是四舍五入的问题。在第一种情况下,它在内部使用非常精确的值 e
,而在第二种情况下,您得到的值不太精确,当乘以 400 倍时,精度问题变得更加明显。
使用Windows计算器的实际结果是5.2214696897641439505887630066496e+173
,所以你可以看到第一个结果是好的,而第二个不是。
5.2214696897641439505887630066496e+173 // calculator
5.221469689764144e+173 // exp(400)
5.221469689764033e+173 // exp(1)**400
从您的结果来看,它似乎使用了一个精度为 15 位的值。
2.7182818284590452353602874713527 // e
2.7182818284590450909589085441968 // 400th root of the 2nd result
这是提高差异的 numpy 优化。
确实,你得懂数学how is calculated the Euler number:
e = (1/n)**n
n == inf.
我认为 numpy 会按特定顺序停止:
你在numpy exp documentation这里对欧拉数的计算方式不是很清楚
因为这个阶数不等于无穷大,所以两次计算的差异很小。
实际上值 np.exp(400)
是使用以下公式计算的:(1 + 400/n)**n
>>> (1 + 400/n)**n
5.221642085428121e+173
>>> numpy.exp(400)
5.221469689764144e+173
这里有 n = 1000000000000
非常小,将这个差异提高到 10e-5。
欧拉数确实没有确切的数值。像Pi
,你只能有一个近似值。