太空僧,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 位就已经很精确了,再多就是浪费宝贵的计算时间了。 也就是说,现在小学生都会背的 山巅一寺一壶酒尔乐苦煞吾(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)被编码为: 但是请注意,这个双精度浮点数的真实值是 3.14159265358979311599796346854[4]。 这也许也是本回答开头提到的小数点后 15 位的由来之一吧。 注:据吉尼斯世界纪录,背圆周率小数点后数字最多的是日本人原口证,他于 2006 年 10 月 3 日耗时约 16 小时成功背到了小数点后 10 万位,打破了此前印度人拉杰维尔·米纳[5]花 9 小时 27 分钟背到 7 万位的纪录。 另外,瑞士人用超级计算机花了 108 天零 9 个小时,算到了小数点后 62.8 万亿位[6]。