跳到主要内容

连分数怎么算,从小数到最佳有理逼近的完整路径

连分数把小数或分数展开成嵌套形式,记作方括号系数,再用渐近分数读出最佳有理逼近。本文讲清辗转相除取整数部分的递归算法,并用圆周率给出 22/7 与 355/113 的来历。

发布于 作者 李雷
#连分数 #有理逼近 #数学 #圆周率 #渐近分数

连分数怎么算,从小数到最佳有理逼近的完整路径

小数和分数各有各的别扭。小数把一个数摊成一长串位,看不出它离哪个简单分数最近;分数随手一写,分母往往是凑出来的,不是最优的。连分数换了一条路:把一个数写成 整数 加 一除以(整数 加 一除以(...)),一层层套下去,然后只把这些整数列出来。这种写法不依赖十进制,反而能直接把一个数的最佳有理逼近一档一档交到你手里。

下面把算法、记法、逼近三件事讲清楚,顺便用圆周率走一遍完整例子。

连分数到底长什么样

一个连分数写成方括号系数,比如 [3;7,15,1]。分号前面是整数部分,后面用逗号分隔的是逐层取倒数的项。展开来就是:

3 + 1/(7 + 1/(15 + 1/1))

注意分号只在第一个数后面出现一次,这是数论文献里的习惯写法。很多人会顺手在整数部分后面也写逗号,记成 [3,7,15],数值上不算错,但和教科书的规范对不上,看 OEIS 或数论参考时容易对错位。

算法核心,取整数部分再取倒数的递归

连分数的展开有一个干净到不像话的递归:取出当前数的整数部分作为一项,把剩下的小数部分取倒数,对倒数再做同一件事。

对一个分数,这套递归就是辗转相除(欧几里得算法)本身。展开 分子/分母,得到的那串商,正好就是连分数的系数。拿 415/93 举例:

  • 415 除以 93,得 4 余 43
  • 93 除以 43,得 2 余 7
  • 43 除以 7,得 6 余 1
  • 7 除以 1,得 7 余 0

商 4、2、6、7 排出来就是 [4;2,6,7]。因为余数一定缩减到 0,任何分数的展开都是有限项,这一点和你算 gcd(415, 93) 收敛到 1 是同一回事。想单独验证那串余数,可以顺手用 gcd / lcm 计算器 把每一步的最大公约数对一遍。

对小数,递归改成取整加取倒数的迭代版,无理数会一直展开下去,只能设一个项数上限截断。

圆周率的连分数,22/7 是怎么冒出来的

把 3.14159265 填进 连分数计算器,展开从 [3;7,15,1,...] 开始。这串系数本身只是中间产物,真正有用的是它生成的渐近分数,也就是把连分数截到某一项得到的分数:

| 截断到 | 渐近分数 | 小数值 | 对圆周率误差 | |---|---|---|---| | [3] | 3/1 | 3 | -0.1416 | | [3;7] | 22/7 | 3.142857 | +1.3e-3 | | [3;7,15] | 333/106 | 3.141509 | -8.3e-5 | | [3;7,15,1] | 355/113 | 3.1415929 | +2.7e-7 |

截到第二项,3 + 1/7 = 22/7,精确到两位小数,这就是课本里那个 22/7 的来历。再往后,355/113 已经精确到六位小数。带符号的误差列把 333/106 到 355/113 的跃升落成一个具体数字,不是空口说"更准"。

关键定理在这里:每个渐近分数,都是所有分母不超过它自身的分数里,离目标最近的那一个。所以这张表不是随便列的逼近,而是每一档分母上的最优解。

黄金比例,最难逼近的那个数

如果连分数的系数全是 1,也就是 [1;1,1,1,...],它收敛到黄金比例 φ ≈ 1.618。系数全 1 意味着每一步取倒数后剩下的部分都最大,逼近收紧得最慢。换句话说,黄金比例是所有无理数里最难用分数逼近的那一个,这也是为什么向日葵的种子排布、某些抗混叠采样会用到它。

我自己第一次盯着这张表时是在配齿轮比,想给 1.61803 找一对能加工的齿数。展开后渐近分数依精度递增给出 13/8、21/13、34/21,全是相邻的斐波那契数。挑分母车间能切的那个就行,这比对着一个七位小数硬凑分母踏实太多。

什么时候用连分数,什么时候用普通分数

连分数擅长的是"在限定分母下找最优分数"这类问题:齿轮比、钟表轮系、把测量值化成干净分数。如果你只是想把一个小数化成最简分数对答案,不需要整张渐近分数表,用 小数转分数工具 更直接,它给的就是约分到底的那一个结果。

两件事的边界很清楚:要"逐档逼近"就看连分数的渐近分数,要"唯一一个最简结果"就用普通分数化简。算法都建在辗转相除上,只是读取方式不同。

连分数不是冷门把戏,它是把一个数的逼近结构摊开看的最直接工具。下次遇到"哪个简单分数最接近这个值",别再瞎凑分母,展开成连分数,答案就在渐近分数那一列里。


Made by Toolora · Updated 2026-06-13