圆周率的 e 为 1.0,我无法理解其背后的原因。在理解基础科学方面需要帮助
e to the pi gives 1.0 and I am unable to comprehend the why behind it. Need help in understanding the underlying science
我创建了一个简单的函数来求解 e 的幂 pi 解释 here
def e_to_power_pi(number):
return (1 + (1/number)) ** (number * math.pi)
从外观上看,很简单的一段代码。但是看看这两个值的输出差异:
示例一:
e_to_power_pi(1000000000000000)
输出:
32.71613881872869
示例二:
e_to_power_pi(10000000000000000)
输出:
1.0
在拆解代码后,我了解到 1.0 来自这部分
1 + (1/number) 上面的代码。
当我进一步拆解时,我了解到 1/10000000000000000
输出正确答案 0.00000000000000001
。
但是当我添加 1
结果时 returns 1.0
而不是 1.00000000000000001
.
我推测它必须是 python 中的默认四舍五入,它可能正在更改值。
我决定使用 round(<float>, 64) # where <float> is any computation taking place in code above
来尝试获得 64 位 post 十进制结果。但是当执行加法时我仍然遇到相同的结果,即 1.0
.
有人可以指导我或指出我可以学习或进一步阅读的方向吗?
您正在使用双精度二进制浮点格式,具有 53 位有效数字精度,这不足以表示您的分数:
10000000000000001/10000000000000000 = 1.0000000000000001
见IEEE 754 double-precision binary floating-point format: binary64
Mathematica 可以以比建筑强加的机器精度更高的精度运行。
见Wolfram Language: MachinePrecision
下面的 Mathematica 屏幕截图显示您需要比 53 位 更高 的有效数字精度才能获得 1 以外的结果。
N
将小数结果数值化为要求的精度。机器精度是默认的;更高精度的计算在软件中完成。
我创建了一个简单的函数来求解 e 的幂 pi 解释 here
def e_to_power_pi(number):
return (1 + (1/number)) ** (number * math.pi)
从外观上看,很简单的一段代码。但是看看这两个值的输出差异:
示例一:
e_to_power_pi(1000000000000000)
输出:
32.71613881872869
示例二:
e_to_power_pi(10000000000000000)
输出:
1.0
在拆解代码后,我了解到 1.0 来自这部分 1 + (1/number) 上面的代码。
当我进一步拆解时,我了解到 1/10000000000000000
输出正确答案 0.00000000000000001
。
但是当我添加 1
结果时 returns 1.0
而不是 1.00000000000000001
.
我推测它必须是 python 中的默认四舍五入,它可能正在更改值。
我决定使用 round(<float>, 64) # where <float> is any computation taking place in code above
来尝试获得 64 位 post 十进制结果。但是当执行加法时我仍然遇到相同的结果,即 1.0
.
有人可以指导我或指出我可以学习或进一步阅读的方向吗?
您正在使用双精度二进制浮点格式,具有 53 位有效数字精度,这不足以表示您的分数:
10000000000000001/10000000000000000 = 1.0000000000000001
见IEEE 754 double-precision binary floating-point format: binary64
Mathematica 可以以比建筑强加的机器精度更高的精度运行。
见Wolfram Language: MachinePrecision
下面的 Mathematica 屏幕截图显示您需要比 53 位 更高 的有效数字精度才能获得 1 以外的结果。
N
将小数结果数值化为要求的精度。机器精度是默认的;更高精度的计算在软件中完成。