piapia123
zh

圆周率 π 与自然常数 e 查询

查询

所有处理都在浏览器本地完成,数据不上传服务器

输出

三种查法,对应三种真实需求: 取前 N 位 —— 最常见的一档(「π 的前 100 位」,背下来应付面试的人不少)。 从第 N 位起取若干位 —— 查任意一段,比如第 1000 到 1050 位。 找一个数字串 —— 「我的生日 19900307 出现在 π 的哪一位」。这是这个页面最常被拿来玩的一件事:在每一万位里,任意一个 4 位数平均出现约一次,7 位数则平均每 1000 万个位置才出现一次 —— 所以短串几乎一定找得到,长的就要碰运气了,而工具会如实告诉你找没找到。 位数只数小数部分。 「第 1 位」指的是小数点后第一位,不是整数位 `3`。这是查圆周率位数的通行口径(背 π 的人说「第 100 位」,说的都是小数部分),按含整数位来数的话,全世界所有「π 的第 N 位」的资料都要错开一位。 内置的一万位(π)与五千位(e)用四组互不相干的恒等式交叉验证过,前 50 位另与公开值核对过 —— 出处写在数据文件里,不需要「相信这份常量」。

功能

  • π 内置一万位小数、e 内置五千位小数
  • 三种查法:前 N 位、第 N 位起的若干位、查找一个数字串
  • 查找会给出全部出现位置(含重叠的命中),并说明共有几处
  • 位数只数小数部分,与「背 π 到第 100 位」的口径一致
  • 数据用四组独立的恒等式交叉验证过,前 50 位与公开值一致
  • 查找接受带空格、逗号的输入
  • 要的位数超过内置位数时会说清只有多少位
  • 全部在本机计算,不请求任何接口

使用方法

  1. 选常数:π 还是 e
  2. 选查法:取前 N 位、从第 N 位起,还是找一个数字串
  3. 填位数或要查的数字串
  4. 点「复制」取走结果

常见问题

为什么只到一万位?
因为再往上就得换存储方式了。一万位是 10 KB 文本,随页面加载几乎无感;而「查第 50000 位」这种需求,靠内置数据是取不到的 —— 要么把常量写到几十万位(几百 KB),要么改用 spigot 算法现算(每次几百毫秒)。两种做法服务的都是极少数场景,而当前的取舍是「打开即用、零延迟」。真需要更多位数时,那是一个可以单独做一档的决定。
查找会不会漏掉重叠的出现?
不会,重叠的命中也算。比如在 `111` 里找 `11`,第 1 位与第 2 位各出现一次,两处都算。只报不重叠的那种写法会漏掉一半的命中,而用户是拿着位置去核对的 —— 少报一处,他就会以为那里不是要找的串。命中很多时(比如查单个数字 `1`)只列前 20 处,并说明还有多少处。
内置的位数靠谱吗?
靠谱,而且这个不需要你相信。数据是用 Machin 公式算出来的,然后用三组完全不同的恒等式(欧拉公式、另一组欧拉式、Störmer 公式)各复算了一遍,一万位逐位一致;e 用精确有理数求和(公分母 4000!)复算,与逐级数一致。另外两者的前 50 位都与公开可查的值核对过。`constant-digits.spec.ts` 会把前 100 位与已知值比对,以后谁改了数据、手滑一位,测试立刻红。

相关工具