1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

圆周率 π 在实际工程领域最多用到了多少位?

本帖由 漂亮的石头2023-06-13 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,020
    赞:
    46
    [​IMG]
    [​IMG] 太空僧,2022年新知答主|航天及天文优秀答主

    今天是 3 月 14 日,我来说一下发射宇宙探测器需要的π的精度吧。

    先说答案:在星际航天领域,π最多取到 3.141592653589793,也就是小数点后 15 位,就完完全全够用了。

    15 位真的够用么?

    目前智人用于宇宙航行的人造航天器中,飞得最远的应该就是“旅行者 1 号”了。

    它目前离地球已经有 159.258219902 个天文单位(也就是约 238.25 亿公里),那么以地球为圆心,以“旅行者 1 号”与地球的连线为半径 R 画圆,这应该算是人造物体中能达到的最大的一个圆了。

    那求它的周长,也就是 2πR,应该得到的结果是在 1497 亿公里左右,当我们取 15 位的π=3.141592653589793 并舍去 15 位之后的数字时,那么实际算出来的周长应该是略小于真实世界的周长(本文假设我们附近的宇宙可以这样测量),那差多少呢?差不多是 1 厘米左右的误差。

    1 厘米!

    也就是说,我们在丈量整个太阳系的尺寸时,π即使只取小数点后 15 位,误差也只有一只圆珠笔杆那么细。

    可观测宇宙

    有人会想,这是人造物体限制了想象力。我们的可观测宇宙半径有 460 亿光年[1]呢!那计算我们的可观测宇宙的“腰围”,需要π的精度是多少位呢?

    我们想的极端一点,如果要把误差控制在一个氢原子的直径那么小(我相信目前应该没有哪个实际工程领域能取到更小的值了),那么只需要取到小数点后面 37 位就可以了。

    实际工作中

    以上两个都属于钻牛角尖的极端例子了。在实际航天工程的运算中,用到π时也不会刻意去取那么长的数字。

    比如在让航天器入轨时,比如在设计火星着陆器的降落伞尺寸和确定着陆点时,比如卡西尼号在在土星附近为了改变拍摄角度而进行的被称为“圆周率转移”的变轨时,比如绘制地球表面地图时,比如在观测系外行星在横穿恒星“圆面“时通过恒星光度的变化来求行星大小时,比如在定位月球和火星地震源[2]时,甚至在计算火箭”油箱“要加多少燃料时,等等等等,都需要用到π,(这里我能写上一万字),一般情况下,用小数点后第 8 位就已经很精确了,再多就是浪费宝贵的计算时间了。

    [​IMG]

    也就是说,现在小学生都会背的 山巅一寺一壶酒尔乐苦煞吾(3.1415926535[3])在实际航天领域就已经够用了。

    程序中的π

    以下是几个常见计算机语言中对π的定义值:

    语言命令小数位数值
    Java Math.PI 15 3.141592653589793
    C/C++ M_PI 20 3.14159265358979323846
    Python math.pi 20 3.14159265358979323846
    Swift 3.0 Double.PI >=15 3.141592653589793…
    Go Pi 62 3.141592653589793238462643383279
    50288419716939937510582097494459

    由于十进制数字通常需要转换为二进制存储到计算机上,在近 99%的情况下,是采用单精度浮点数和双精度浮点数的典型存储方式。单精度浮点数用 4 个字节(32 位)来存储一个浮点数(7 位十进制有效数字),双精度浮点数用 8 个字节(64 位)来存储一个浮点数(15~16 位十进制有效数字)。

    按照 IEEE 754 标准,在双精度浮点数的编码规则下,16 个数字(小数点后 15 位)的圆周率π(3.141592653589793)被编码为:

    [​IMG]

    但是请注意,这个双精度浮点数的真实值是 3.14159265358979311599796346854[4]。

    这也许也是本回答开头提到的小数点后 15 位的由来之一吧。

    注:据吉尼斯世界纪录,背圆周率小数点后数字最多的是日本人原口证,他于 2006 年 10 月 3 日耗时约 16 小时成功背到了小数点后 10 万位,打破了此前印度人拉杰维尔·米纳[5]花 9 小时 27 分钟背到 7 万位的纪录。

    另外,瑞士人用超级计算机花了 108 天零 9 个小时,算到了小数点后 62.8 万亿位[6]。
     
正在加载...