【发布时间】:2022-07-08 04:41:36
【问题描述】:
在 IEEE-754 float64 中可能最准确的 pi 近似值是多少?
fwiw 似乎 Javascript 和 PHP 都使用 3.141592653589793115997963468544185161590576171875
,这可能是答案,我不知道。
【问题讨论】:
-
假设您的意思是
binary64(IEEE-754 也提供decimal64)?通过用十进制表示二进制浮点数,您已经失去了“准确性”。适合二进制 64 浮点数的最准确近似值可能最好表示为它的位,而不是十进制转换。 -
此外,Wikipedia states“53 位有效数字精度提供 15 到 17 位有效十进制数字精度”,因此您在上面引用的任何值(据我计算约为 49 个有效数字)都将是存储在 binary64 fp num 中时显着截断。
-
@spender:用十进制表示任何二进制浮点数都不会损失准确性,除非您没有使用足够的数字或做错了。维基百科将精度描述为“15 到 17 位有效十进制数字”是nonsensical and wrong。此外,良好的 C 实现在将十进制数字转换为浮点数时不会“截断”它们;它们执行 IEEE-754 所称的“正确舍入”转换。
-
即使 IEEE-754 也不强制使用 all 有效十进制数字。 IIRC,有效十进制数字的最小个数是 +3 将所有 binary64 往返到文本到 binary64 或 17 + 3 所需的数字.IAC,3.1415926535897931159979...的前17位数字将四舍五入到与使用超过17位数字相同的binary64。当仅使用 20 位而不是 21+ 时,其他选择文本值可能会以不同的方式舍入。但是这些文本值接近两个 binary64 值的中间值。