2*WorksheetFunction.Pi VS 2*3.14159265358979(PI的值)精度差
2*WorksheetFunction.Pi VS 2*3.14159265358979 (value of PI) difference in precision
我注意到在 VBA 中完成的以下两个计算之间存在精度差异(我使用 VBA 立即数 window 作为输出):
2 * WorksheetFunction.Pi = 6.28318530717959
2 * 3.14159265358979 = 6.28318530717958
注意最后一位是8,上面是9,尽管计算中使用的3.14159265358979是“WorksheetFunction.Pi”给出的结果。
第一个结果是更准确的结果,查看较长的 PI 值 (2 * 3.141592653589793 = 6.283185307179586,四舍五入为 59).
对上面的任何解释,是否可以在 VBA 中手动使用更长的 Pi 值?
根据 this documentation PI 函数只有 returns 15 位数字作为双精度。
在 VBA here 中有一个关于 PI-precision 的古老但有趣的对话,其中有一个 Excel MVP 的多个解决方案,一个人会像这样声明 PI PI = 4 * ATN(1)
和另一个 MVP 说“为了最准确,像这样声明 PI...”是这个
Dim PI As Variant
PI = CDec("3.1415926535897932384626433833")
我还没有验证这是否真的有效,但看起来很有希望。
我注意到在 VBA 中完成的以下两个计算之间存在精度差异(我使用 VBA 立即数 window 作为输出):
2 * WorksheetFunction.Pi = 6.28318530717959
2 * 3.14159265358979 = 6.28318530717958
注意最后一位是8,上面是9,尽管计算中使用的3.14159265358979是“WorksheetFunction.Pi”给出的结果。
第一个结果是更准确的结果,查看较长的 PI 值 (2 * 3.141592653589793 = 6.283185307179586,四舍五入为 59).
对上面的任何解释,是否可以在 VBA 中手动使用更长的 Pi 值?
根据 this documentation PI 函数只有 returns 15 位数字作为双精度。
在 VBA here 中有一个关于 PI-precision 的古老但有趣的对话,其中有一个 Excel MVP 的多个解决方案,一个人会像这样声明 PI PI = 4 * ATN(1)
和另一个 MVP 说“为了最准确,像这样声明 PI...”是这个
Dim PI As Variant
PI = CDec("3.1415926535897932384626433833")
我还没有验证这是否真的有效,但看起来很有希望。