祖冲之,字文远,公元四二九年生于建康(今南京),祖籍范阳遒县(今河北涞水)。祖家世代掌管土木与天文:祖父祖昌做过刘宋的「大匠卿」,管朝廷工程;父亲祖朔之学识渊博,常被邀去参加皇室的典礼。少年祖冲之在这样的门第里长大,一面看工匠放线、立柱,一面跟着父祖认星、记日影。
他一生做成了三件事,三件都用同一副筋骨。《大明历》把岁差第一次写进历法,把「十九年七闰」改成「三百九十一年一百四十四闰」,定一个回归年为三百六十五点二四二八日;圆周率算出 3.1415926 与 3.1415927 之间,又给了两个分数:约率 22/7、密率 355/113;机械上改造指南车、造千里船、制水碓磨,都是史书里记下名目的实物。
他的著作《缀术》六卷,唐代曾是国子监算学的课本,学官要讲四年,后来失传了。今天能读到他的圆周率,靠的是《隋书·律历志》里一段不到百字的记载——一串用「丈、尺、寸、分、厘、毫、秒、忽」写下的数。书没了,数还在。
这个人身上最值得看的一点,不是他算得比别人快,而是他知道自己算到了哪一步、还差多少。他给圆周率不是报一个近似值,而是报一个上下界;给历法不是报一个「合用」,而是报出每年差多少秒。这在公元五世纪,是一种罕见的诚实。
故事层——跟着画面走:工地上的一架圭表、一院子摆开的算筹、朝堂上的一场争辩、江面上一艘试航的快船。
数学层——暖金色的框里是这一页真正的数学:位值记数、割圆递推、开方、夹逼与误差、连分数、历法常数。
注疏层——页面下方的小字,标注年代、原文与真伪,给一起读的大人。
建康城的春天,将作监的后院里立着一根八尺高的木杆。杆叫「表」,杆下平铺的石台叫「圭」,合起来是「圭表」——中国最古老的天文仪器,只用来看一件事:正午太阳投下的影子有多长。
影子每天都不一样。夏至最短,冬至最长;一年走一圈,影子在石台上进退一个来回。祖父祖昌告诉他:冬至那天影最长,量准了这一天的影长,一年的长度就定了。祖冲之蹲在石台边看刻线,问了一句:那去年的冬至,和今年的冬至,影长一样吗?
祖父没有立刻答。他翻出旧档:同一根表、同一座台,几十年来记下的冬至影长,一年一年,总在慢慢地变——不是量错了,是真的在变。变多少?几十年才看得出一点。这一点,当时的历法里没有它的位置。
这就是祖冲之一生要对付的东西:不是「差很多」,而是「差一点」。差一点,肉眼看不见,秤也称不出,可它会攒——攒上几十年,冬至就错了一天;再攒,节气和月份就对不上,农时、祭祀、日月食的预报全都跟着错位。
历法的全部难处,都藏在这「一点」里。要抓住它,先得有一把能读到「一点」的尺子——而在公元五世纪,那把尺子是一堆小竹棍。
算筹是一把竹棍,每根长短粗细一样,装在一只布袋里,随身带着。用的时候往席上或案上一摆,就是数;挪一挪、撤几根、添几根,就是加、减、乘、除。没有算盘,没有纸笔竖式,也没有小数点——所有的数都躺在这把棍子里。
摆法有讲究。一至五,用相应根数的棍子表示:一竖、二竖、三竖、四竖、五竖;六至九,则是一根横棍压在一根竖棍上(六),压两根(七),压三根(八),压四根(九)。这是「纵式」。另有一套「横式」:横着摆的棍子计一至五,一根竖棍压在横棍上计六至九。
为什么要两套?为了认位。个位用纵式,十位用横式,百位又用纵式,千位用横式……纵纵横横相间,一眼就能看出哪一位是十、哪一位是百。哪一位是零,就空出一段席面。位值制,就这样被摆在了桌上。
祖冲之的父亲教他布算,第一课不是算得快,而是摆得正:位与位要对齐,行与行要留出空当,撤筹的手不能碰乱旁边的数。一笔大账动辄几十个数位,摆错一位,前面全废。后来祖冲之算圆周率,一动笔就是九位数、十几次开方——靠的正是这份从小学来的整齐。
这把竹棍还有一个脾气:它只会整数。分数怎么办?古人用「几分之几」的筹式摆出来,分子在下、分母在上,或者用「丈尺寸分厘毫」这样的十进制名数往下细分。祖冲之的那串圆周率,就是用名数写下来的。
「周三径一」——周长三尺的圆,直径一尺。这句话写在《周髀算经》里,是古人传下来的「古率」,工匠世代照用。它简单、好记、下料方便,用在碗口大的物件上,谁也看不出错。
可圆一大,错就藏不住了。取直径一丈的圆,按周三径一算,周长三十尺;真值是三十一尺四寸一分五厘九毫。差了整整一尺四寸一分六厘——做车轮,这一尺多的木料要么接不上,要么多出来没处去;做大钟,音就不准;造浑天仪的铜环,两个环的周长对不上,装不进同一副架子。
更麻烦的是:这点比例上的差,会随着尺寸一起长大。直径一尺,差一分四厘,木匠用刨子推两下就补上了;直径一丈,差一尺四寸,一段木料就废了;直径十丈的大环,差出一丈四尺,整副架子都装不起来。造一口鼎、铸一只钟、算一仓米,误差不是一个数的小事,是材料、工钱和音律的事。
所以「周三径一」不是错,是不够细。它把一个无限不循环的数,四舍五入成了一个整数。要让它够用,只有一条路:把这个数算得更准——准到用一丈作直径时,误差落在「分」以下;准到用一里作直径时,误差还落在「寸」以下。
这条路,前人已经走了半步。三国时一位叫刘徽的人,给《九章算术》作注,在「方田」章里写下八个字:割之弥细,所失弥少。他把圆切开,用直边去逼近曲边。他停在了九十六边形,得了一个数:三点一四。祖冲之从这里接着走。
将作监的后院在造一辆牛车。轮子直径三尺,六段辋木围成一圈。老木匠按「周三径一」下料:径三尺,周三尺乘三,得九尺;六段各一尺五寸,锯口留一分。料裁得整整齐齐,围上去却短了——最后一段与第一段之间,空出三寸多的一道缝。
木匠不慌:这是常事,把每段的斜口放宽些,敲进去就严了。一千年来都是这么干的。祖冲之蹲下来,用一根细线绕过轮圈量了一遍,又量了直径,回头在席上布了几根算筹:径三尺,周不该是九尺,该是九尺四寸二分五厘。六段辋木,每段短了七分。
木匠笑了:差七分,敲一敲就进去了,车轮照样转。祖冲之没有笑。他问:若是造一辆直径一丈的大车呢?若是给浑天仪造一只直径一丈的铜环呢?若是量一里见方的田地,要按圆算呢?——每处都短一截,短的那截加在一起,就是一座房子的木料。
这不是手艺的事,是率的事。「周三径一」把圆周与直径的比定成了三,可这个比不是三。它比三多一点,多出来的那一点,是个除不尽的数。用三去下料,等于每三尺就少给一寸四分的料——木匠的手再巧,也补不回一个错的率。
那天晚上,祖冲之把《九章算术》翻到「方田」章。刘徽的注写在圆田术下面,八个字:割之弥细,所失弥少。他在这八个字上停了很久。第二天,他去借了一间空屋,搬进去一袋算筹。
把问题写成一句话:圆周与直径的比值,不是一个整数。这个比值后来写作 π,它的真值在 3.1415926 与 3.1415927 之间,而且永远写不完。「周三径一」取的是 3,比真值少了 0.1415926……——相对误差约百分之四点五。
百分之四点五听起来不大。可它是按比例错的:直径越长,错的绝对长度就越大。直径一尺,差一分四厘;直径一丈,差一尺四寸;直径十丈,差一丈四尺;直径一里(一百五十丈),差二丈一尺——足够让一只铜环套不进另一只。
换一个方向看:如果一只轮的周长按「周三径一」下料,那么轮子转一圈,实际走过的路比算出来的多百分之四点五。走一里,少算七丈;走百里,少算七里。造车的人只关心轮子转不转,可管历法的人关心「走了多远」——历法里的「里」,是天的里。
所以误差有两种报法。一种报「差多少」:差一尺四寸。一种报「差百分之几」:差四点五。前一种随尺寸变,后一种不变。真正管用的,是后一种——它才是这个「率」的本来面目。
要改,只有一条路:把 π 算得更准。准到小数点后几位,误差就缩到几万分之一,大圆的差也就落到「分」以下。问题是:怎么算?靠量不行——尺子的刻度比要量的差还粗。得靠算。
刘徽的办法,说穿了很朴素:用直的去量曲的。在圆里画一个正六边形,六个顶点落在圆上,六条边是直的、能量、能算。这个六边形的周长比圆短——它整个缩在圆里面。那么把六边形的每条边对着的弧再一分为二,连成十二边形:它比六边形更贴近圆,周长更长,也更接近圆。
再分:二十四边形、四十八边形、九十六边形、一百九十二边形……每分一次,多边形的边就多一倍,边就越短,整个形状就越「鼓」,越贴住圆。刘徽的原话是「割之弥细,所失弥少」——割得越细,丢掉的那点越少。
他算的是面积,不是周长。圆内接正 n 边形的面积,可以拆成 n 个等腰三角形来算:每个三角形的两腰是半径 R,夹角是 360°/n。有了边数和半径,面积就能用筹算一步步逼出来。算到一百九十二边形,他得 3.141024;他给出的实用值,是分数 157/50,也就是 3.14。
更妙的是他给了一个「夹」的办法:算到第 n 边和第 2n 边,两者面积之差是一个可算的「零头」;圆的面积比 2n 边形大,又比「2n 边形加上这个零头」小。于是圆被夹在两条可算的界线之间——不必知道真值,也知道真值在哪一段里。
刘徽在一百九十二边形停了手,得 3.14。这个数用了五百年,够用。可祖冲之要的不是「够用」,他要的是「差多少」——要把那段夹缝,收到七位小数那么窄。
每倍一次边,误差不是减半,而是减到约四分之一——因为误差与边数的平方成反比。这既是好消息,也是坏消息:想多对一位小数,边数得翻三倍多;想多对两位,边数得翻十倍。越往后,付出的力气越大,收回的精度越小。
更实在的难处是算。倍边一次,要用勾股定理求新边长:先算弦,再开方。开方在算筹上是一整套手续——要试商、要减、要把已得的商翻倍再试,每一步都得摆筹、撤筹。刘徽算到一百九十二边形,已经开了五轮方;再往下,每轮的开方要保留的位数还要加。
所以他停在一百九十二边,把 3.14 交出去,并留下一句话:真要更准,得割到三千零七十二边。这句话是留给后人的——他知道路怎么走,只是没走完。走完这段路,需要的不只是聪明,是几年的空闲、一屋子算筹和一副不嫌烦的性子。
五百多年后,祖冲之接着走。他要的不是 3.14,是七位小数:从 192 边起,再倍七次,到 24576 边。每倍一次,开方一次;每次开方,要把数算到第九位。这是一条用竹棍铺出来的路。
这条路上还有一件刘徽没有明说的事:光有内接的「少」,不够。还得有外切的「多」——一个从外面压下来的界。两边一夹,才知道真值落在哪一段。下一页之前,先看这条路为什么非走不可。
大明六年,公元四六二年,祖冲之三十三岁。他把一部新历的稿本呈给宋孝武帝,附一道表,请朝廷颁行。这部历后来叫《大明历》——不是因皇帝的年号得名,是他自己起的名字。
他凭什么改历?凭三笔账。当时的《元嘉历》是何承天所造,通行了二十年,祖冲之实测后发现:冬至那天太阳所在的位置,算的与实际差了三度;冬至、夏至的时刻,差了一天;金木水火土五星出没的时间,差了四十天。三笔账,一笔比一笔大。
表文里他写自己的做法:亲量圭尺,躬察仪漏,目尽毫厘,心穷筹策——亲自量日影,亲自看漏刻,眼睛盯到毫厘,心里把算筹走到底。这十六个字,是他全部工作的自述:不靠古书,不靠推算的方便,靠一件件量出来的数。
《大明历》改了三件大事。第一,把岁差写进历法——冬至点每年不是回到原处,而是往西退一点,退的速度要算进去。第二,改闰周——旧法十九年七个闰月,他改成三百九十一年一百四十四个闰月。第三,定交点月——月亮两次经过同一黄白交点的时间,定准了,日月食才预报得准。
这三件事,说到底都是同一件事:把一个「差不多」的常数,换成一个「差多少」都写清楚的常数。历法的命门不在算得巧,在于敢不敢报出自己差多少。这道表递上去,等来的不是准奏,是一场辩论。
第一幕有两条线:一条在工地上,一条在星空中。工地上量的是车轮的周长,星空里量的是太阳走一圈的天数。两条线看着不相干,用的却是同一把尺——把一段连续的、分不清界限的量,切成可数的份。
切法完全一样。历法先把天周分成三百六十五又四分之一度,再把一度分成「分」,一分分成「秒」;割圆先把直径定成「一」,再把一分成十份、百份、千份。两边都是:先立一个基准,再定一个等分的规矩,然后数格子。
连记法都一样。中国算学不用小数点,用「丈、尺、寸、分、厘、毫、秒、忽」这样的名数往下写:一丈等于十尺,一尺等于十分,一分等于十厘……每往下一级,就是一位小数。祖冲之的圆周率原文写「三丈一尺四寸一分五厘九毫二秒六忽」,翻成今天的写法,就是 3.1415926 丈。小数没有被发明,它被「量」出来了。
所以第一幕的答案是:圆周率与历法,不是两门学问,是同一种手艺的两个活儿。手艺的名字叫「定率」——把两个量之间的固定比例找出来,并且说清这个比例准到什么程度。车轮的率是周长比直径,历法的率是一年比一日。
下一幕,看这把尺怎么落到一屋子算筹上。那是全册最笨、也最见功夫的一幕:他没有巧办法,只有一双手和九年。
第一幕从一辆车轮出发,账清一清。
错在一个「率」。「周三径一」把圆周率定成 3,真值多出 0.14159……;相对误差百分之四点五,绝对误差随直径成比例长大。小物件看不出,大圆藏不住。
刘徽给了刀法。圆里画正多边形,边数一次次加倍,多边形一层层贴住圆;他算到一百九十二边,得 3.141024,交出徽率 157/50。他还给了「夹」的办法:圆的面积介于两个可算的多边形之间。
祖冲之接了棒。刘徽停在 3.14,因为再往下算,力气翻倍而精度只多一点点;祖冲之要的是七位小数,得把边数从一百九十二推到两万四千五百七十六。第一幕给全册立了题:不是「算不算得出」,是「敢不敢报出还差多少」。
圆周长 C=πd;相对误差=(π−3)/π≈4.5%,绝对误差随 d 线性增长。
割圆:内接正 n 边形面积 Sn=(n/2)R2sin(360°/n);Sn<S圆<Sn+(Sn−Sn/2)。误差随边数平方反比缩小。
娄县的县衙后院有一间空屋。祖冲之到任之后,把屋子清出来,地上铺席,席上摆筹。一摆就是几个月。县里的吏员起初以为县太爷在算什么大账,后来发现他算的东西谁也看不懂:一堆越来越长的数,一遍遍开方,一遍遍抹去重来。
他要算的是一件极简单的事:一个圆,直径定作一,周长是多少。这个「多少」不是一个能写完的数。他只能一段一段地逼近:先算六边形,再十二边,再二十四边……每翻一倍,就把答案往真值那边挪一点。
麻烦在于,每翻一倍都要开一次方。而开方在算筹上不是一步,是一整套手续:定位、试商、乘、减、加倍、再试。一次开方要摆几十根筹,一个数要开七八轮。一轮算错,前面全废,得从头再来。
史书没有记下这间屋子,也没有记下他算了多久。只有他自己在表文里写过八个字:心穷筹策——心里的那笔账,一直走到筹策的尽头。这四个字,比任何传奇都更接近那几年的真相:没有灵光一闪,只有一遍遍地重来。
后院那间屋子,后来成了县里的谈资。有人说县太爷在算天,有人说他在算什么了不得的东西。他确实在算天——只不过先从一口井口大的圆开始。
割圆的第一步,是把「翻倍」写成一个可算的式子。设圆的半径为 R,正 n 边形的一边长为 an。把每条边对着的弧一分为二,就得到正 2n 边形,它的边长记作 a2n。
从圆心向 an 的中点连一条线,这条线垂直于边,把边切成两半,每半是 an/2。用勾股定理,这条垂线的长是 √(R2−an2/4)。新边 a2n 是直角三角形的一条斜边,两条直角边分别是 an/2 和「半径减去那条垂线」。
把 R 取作 1,式子就变干净了:a2n=√(2−√(4−an2))。从正六边形起步,a6=1(六边形的边长正好等于半径),一代进去就能算出十二边形的边:√(2−√3),约 0.5176381。
再代一次,得二十四边形的边 0.2610524;再代,四十八边 0.1308063;九十六边 0.0654382;一百九十二边 0.0327235。每代一次,数就小一半——边越来越短,边数越来越多,形状越来越圆。
有了边长,周长就有了:正 n 边形的周长是 n·an;除以直径 2R=2,就是这一层给出的圆周率近似值。整个割圆术,就是这一个式子的反复代入——没有别的秘密。
递推式里套着两层根号。要算出下一层的边长,就得开方——而且是开一个已经带小数的数的方。算筹不会「按一下」,它只会摆。开方的全套手续,写在《九章算术》「少广」章里,叫「开方术」。
手续是这样:把要开的数(叫「实」)摆好;在它下面「借一算」,按位隔一位摆开(「超一等」),这是为了定出商有几位;然后在最高位试一个数,让这个数的平方不超过实,写下来作商;从实里减去这个平方,剩下的叫「余」。
接下来是最费事的一步:把刚才的商加倍,作为新的「法」,退一位摆到余数下面;再试一个数,让「法×试数+试数2」不超过余——这个试数就是下一位商。减完,再把这个试数加到法上,法再加倍、再退位、再试下一位……一位一位往下走。
拿 √2 试一遍:先得商 1,余 1;法加倍成 2,退一位,试 4(24×4=96<100),余 4,商成 1.4;法变 28,再退位,试 1(281×1<400),余 119,商成 1.41;继续试,得 1.414、1.4142……要几位,就试几位。
割到两万四千五百七十六边,这条链要走十二轮;每一轮的开方,都得算到小数点后八九位。也就是说,每一步都要试商八到九次,每次试商都要摆一遍筹、减一遍数。这就是「算筹的长征」——路不长,一步一脚。
只有内接多边形,只能给出一个「偏小」的数:真值比它大,大多少不知道。要夹死真值,还得从外面套一层。把多边形的每条边向外推到与圆相切,就得到外切正多边形——它把圆整个罩住,周长一定比圆长。
于是每层都有两个数:内接的偏小,叫朒数;外切的偏大,叫盈数。真值卡在两者之间。层数越高,两张网收得越紧;收到一定程度,盈数与朒数在小数点后第七位上还相同——这一位就被「夹」定了。
这里有一个容易忽略的细节:用周长逼近和用面积逼近,收网的速度不一样。周长法的误差与边数平方成反比;面积法的误差是它的四倍。同样割到一万二千二百八十八边,周长法已经能定到七位,面积法还差一点。刘徽用的是面积(他会算「差幂」),祖冲之承的是刘徽的路子,所以要一直割到二万四千五百七十六边。
到这一层,内接形给出的数约是 3.14159263,外切形给出的数约是 3.14159267——两个数都落在 3.1415926 与 3.1415927 之间。真值被关进这一间「七位小数」的屋子,前后左右都封死了。
这就是那串看起来奇怪的记载的来历:正数在盈朒二限之间。不是「约等于」,是「大于谁、小于谁」——一个区间,八个数字,两千年后仍然精确。
有人会问:既然只要量出周长和直径,拿一根绳子绕一圈、再量绳子不就行了?答案是:量得出来,但量不准——不是手不稳,是尺子本身不够细。
一根绳绕圆一圈,绳的松紧、粗细、贴合的程度,每一处都带来误差。就算绳完美,尺子上的最小刻度是「分」;一尺的圆,周长三尺一寸四分,读到「分」已是极限,再往下就是估读。要读出第七位小数,等于要求尺子上刻出「一亿分之一丈」的格子——那不是尺,那是显微镜。
算就不一样。算的精度不受材料限制,只受耐心限制:多算一层,多开一次方,就多对一位。算筹不会松,不会弯,不会看错刻度——它只会因为人摆错而错。人只要坐得住,数就一直往下走。
这就是数学史上一个反复出现的转折:当测量到了尽头,计算接过来。天文上也是如此——肉眼看星,看到的是「度」;要更细,就得靠推算。祖冲之测量、推算两条腿走路,正是这个转折点上的人。
但算也有算的代价。算出来的数,得有人相信;相信的前提,是每一步都能复查。所以割圆术的每一步都要留下可检验的式子——不是为了好看,是为了让别人能一遍遍重算,直到确认。
《隋书》记祖冲之的算法,开头有一句极怪的话:以圆径一亿为一丈。直径一亿,怎么叫一丈?这句话让后世读者卡了一千多年。
把它翻过来就通了:他取直径为一个「一亿」,单位不是尺,是忽。一丈等于十尺、百寸、千分、万厘、十万毫、百万秒、千万忽——一亿忽。所以「径一亿」就是「径一丈」,只不过把丈拆成了最小的一格。这样一拆,圆周的长度也落在这套格子上:三丈一尺四寸一分五厘九毫二秒六忽,就是三亿一千四百一十五万九千二百六十六个「忽」。
为什么要这么绕?因为算筹没有小数点。要表示 3.1415926,筹上没法写那个点;但可以把它写成一串整数位——亿、千万、百万、十万、万、千、百、十、个。每一个「忽」就是一位小数。把小数点藏进单位里,这是中国古代算学最实用的一招。
于是整个计算变成了整数运算:直径一亿,周长三亿一千四百多万,两者相除,商就是圆周率。数字大得吓人,可每一步都是加减乘除和开方,算筹完全应付得来。位数多,只是多摆几行筹。
这才是「以圆径一亿为一丈」的真意:不是他量了一个一亿大的圆,是他把一个小圆放大到一亿格,让每一格都成为一位数。九位数的耐心,换来七位小数的确定。
第二幕进了那间摆满算筹的屋子,账清一清。
翻倍有式子。正 n 边形边长 an 与倍边后的边长 a2n 之间,只隔一层根号:a2n=√(2−√(4−an2))。整个割圆术就是这一个式子的反复代入。
开方最苦。每代一次要开一次方;算筹开方要定位、试商、乘、减、加倍、退位,一位一位往下走。算到两万四千五百七十六边,要走十二轮,每轮算到八九位。
夹住才算数。内接偏小(朒)、外切偏大(盈),两张网收到七位小数上会合,真值就无路可逃。这一步给全册定了调:报一个区间,比报一个近似值诚实得多。
倍边递推(R=1):a2n=√(2−√(4−an2));a6=1。
夹逼:n·sin(180°/n)<π<n·tan(180°/n)(周长口径);面积口径同形,收敛慢四倍。误差 ∝ 1/n2。
从六边形到两万四千五百七十六边形,一共十二次倍边。每一次倍边,都要把整条链上的数重算一遍;每一次开方,都要从最高位试到最低位。这不是一次冲锋,是一场长征——路是一寸一寸挪出来的。
史书没有给出年份,只留下一个含混的说法:「久之」。但后人可以从别处推:他在三十三岁上《大明历》,历法里已经用了很精的常数;他到娄县任县令在大明年间,那间摆筹的屋子就在县衙后院。把这些点连起来,割圆的工作大约横跨了他三十岁上下的几年到十几年。
一个人一生能有多少个九年?这九年里,他还要治县、看星、校历、跟人辩论。算筹摊开又收起,收起又摊开。每一轮算完,他把结果记在简上;下一轮从同一个起点重来,只是边数翻倍。这样的日子,没有观众,也没有掌声。
后来的人给他的工作加了很多传奇:说他算错了就整夜不睡,说他把筹摆满了整个院子,说他能从日月食反推圆周率。这些都没有史料。真正有史料的只有两样:他报出的那个区间,和他自己写的八个字——心穷筹策。
第三幕要做的,是把这九年拆成三层看:一层是数(每一层算出什么),一层是误差(每一层比上一层准多少),一层是判据(算到哪一层可以停)。三层看完,就知道那九年不是苦熬,是一场有章法的推进。
把十二层的结果排开,就是一张表。表里每一行是「边数」和「这一层给出的圆周率」。数值按面积法算(内接正多边形面积除以半径平方),与刘徽的口径一致。
最后三层:六一四四边得 3.14159203,一二二八八边得 3.14159252,二四五七六边得 3.14159264。真值是 3.14159265……——到最后一行,前七位小数终于全部对上。
看这张表有一个要紧处:前几层爬得很快,后几层爬得极慢。六边到十二边,一口气从 2.6 跳到 3.0;九十六边到一九二边,只挪了 0.0017;到后面,翻一倍边数只挪动小数点后第七位的一个数字。这就是「割之弥细,所失弥少」的另一面:越接近,越难挪。
所以这张表不是十二次重复,是十二次「逼近」——每一次都在向一个够不着的数靠近一点,永远差一点。数学的诚实,就在这个「差一点」里:他从不写「等于」,只写「在这一层与那一层之间」。
误差不是随便降的,它有一个很规整的节奏:边数翻一倍,误差降到约四分之一。原因是误差与边数的平方成反比——边数变两倍,平方变四倍,误差就只剩四分之一。
拿数字看:三千零七十二边的误差约 0.0000023;六千一百四十四边约 0.00000056;一万二千二百八十八边约 0.00000014;二万四千五百七十六边约 0.000000035。每次确实少掉四分之三,规律一点不乱。
这个「四倍律」有一个实际后果:想多对一位小数(误差缩小十倍),边数得翻约三倍多(因为 √10≈3.16);想多对两位,边数得翻十倍。所以越往后越费力——从六边到一九二边只用了五轮,就换来三位小数;从一九二边到二四七五六边用了七轮,才换来四位。
这也解释了刘徽的停手:他算到一九二边,误差约千分之二,够日常用;再往下,每一轮都要多开一次高精度的方,而只多一位小数。他把「值得」与「不值得」的分界,划在了自己的耐心边上。
祖冲之把这条线又往后推了七轮。多出来的四位小数,值不值七轮?对历法来说,值——因为历法要把一年算到「秒」,而一年有三千多万秒。常数的精度,决定了历法的精度。
一个算法要能收尾,得有一个「停」的判据。祖冲之的判据不是「算累了」,是两张网在小数点后第七位上会合了。会合了,就停;不会合,就再割一层。
到二四七五六边,内接形给出 3.14159263,外切形给出 3.14159267。两个数不同,但都落在 3.1415926 与 3.1415927 之间。既然真值一定在内接与外切之间,那么真值也一定落在这两个七位小数之间——第七位被夹死了,再算下去只能定第八位。
再算一层呢?四九一五二边,内接约 3.141592651,外切约 3.141592657,可以把第八位定成 5。再一层,定第九位。每多一层,多一位,成本翻倍。他停在第七位,是因为第七位已经够历法用,而再多一位,要再赔上几个月。
这个判据里藏着一种今天叫「误差控制」的思想:不是追求绝对精确,而是明确知道当前结果的误差上界。知道误差有多大,才知道这个数能拿去干什么、不能拿去干什么。反之,一个不知道误差的近似值,等于一个不知道保质期的药。
所以祖冲之的贡献不只是「算得准」,更是「知道自己算得多准」。这句话听起来平淡,可在公元五世纪,它是数学方法论上的一次跃进:从「求一个数」,到「求一个带误差界的数」。
《大明历》递上去,宋孝武帝没有立刻准,也没有立刻驳。他把它交给朝臣「难之」——请懂历的人来挑错。挑错的人里,声音最大的是戴法兴。
戴法兴是中书舍人,皇帝的近臣,权倾一时。他的理由不是算错了,而是:历法是古人定的,后代不该改。这句话在当时很有市场——改历意味着承认前朝错了,也意味着动一批人的饭碗。朝中百官惧怕他的权势,大多附和。
祖冲之没有退。他写了一篇《驳议》,逐条回答。开头两句后来常被引用:愿闻显据,以核理实——请拿出明白的证据,来核对道理与事实;浮辞虚贬,窃非所惧——空话与贬损,不是我害怕的东西。
他给出的证据很硬:日影的长度、漏刻的读数、五星出没的日期,一条条列出来,都是「有形可检,有数可推」的。戴法兴拿不出反证,只能说古人如何如何。辩论至此,胜负其实已分。
可胜负归胜负,历法没有颁行。孝武帝一度决定在大明九年改历,第二年皇帝去世,事情就搁下了。此后宋亡、齐兴,祖冲之在齐朝做到长水校尉,七十二岁去世。他生前始终没看到自己的历法通行——直到死后十年,他的儿子祖暅再三上奏,梁朝天监九年(五一〇年),《大明历》才正式颁行。
把祖冲之的做法翻成今天的语言,它是一个标准的算法:给一个初值(六边形边长),定一条递推规则(倍边公式),设一个终止判据(内外两网夹住第七位),然后循环。三样东西,一样不少。
更妙的是它还带「误差分析」:每一层的误差是多少,翻一倍降多少,什么时候可以停。这三件事——递推、终止、误差——正是现代数值计算的三根柱子。今天的计算机算圆周率,用的公式换成了无穷级数(每算一项多好几位),但骨架没变:给初值、按规则迭代、看误差停手。
差别在速度。祖冲之每翻一倍边数,只多对零点几位小数;现代级数公式每加一项,能多对十几位。计算机算到小数点后一百万亿位,靠的是公式好、机器快,不是耐心多。但「耐心」这一项,在最开始的那一步,是唯一的办法。
还有一层:他的算法是可复查的。每一步的边长、面积、开方,都摆得出来,别人可以照着重算。这在古代数学里不是理所当然——很多算法靠口诀、靠师徒相传,错了也查不出。割圆术把每一步摊在席上,这是它能传下来的原因。
第三幕收在这里:一个没有纸笔竖式、没有小数点、没有计算器的时代,用一堆竹棍,完成了一次误差可控、步骤可查、结果可验的计算。这不是奇迹,是手艺的最高形态。
第三幕走完了那九年,账清一清。
十二层,一层一个数。从六边的 2.598 到二四七五六边的 3.14159264,每一层都是同一个递推式的一次代入;越往后越慢,翻一倍只挪一点点。
误差有节奏。边数翻倍,误差降到四分之一;多对一位小数,边数要翻三倍多。刘徽停在一九二边,是因为再往下不值当;祖冲之多推七轮,是因为历法需要那几位。
停有判据。内接与外切两张网在小数点后第七位会合,就停。于是有了那句「正数在盈朒二限之间」——不是约等于,是一个封死的区间。全册的暗线在这里露了底:把「差不多」说成「差多少」。
递推:a2n=√(2−√(4−an2)),a6=1。误差 ∝ 1/n2,故倍边降为四分之一。
终止判据:内接与外切两值同落在一个七位小数区间内,则 3.1415926<π<3.1415927 成立。
七位小数算出来了,麻烦才刚开始。一颗珠子、一段木料、一斗米,报账时不能报「三点一四一五九二六」——太长了,算筹摆不下,嘴上念不清,写进简册占半行。工匠要的是一个能上手的数。
古人的办法是给分数。「周三径一」是 3;刘徽的徽率是 157/50,也就是 3.14;还有一个广为流传的「径七周二十二」,即 22/7,约 3.142857。这三个数,一个比一个准,可都不够准:22/7 与真值差千分之一以上,造大车大钟,仍然差得出来。
祖冲之给了两个分数。一个叫约率:22/7,粗而好用。一个叫密率:355/113,直径一百一十三,周长三百五十五。密率的值是 3.14159292……,与真值只差亿分之二点七。
这两个名字起得极准。「约」是简略,「密」是精密。同一个数,给两种人:给工匠约率,一眼能算;给历官密率,一算就准。这不是妥协,是分层的智慧——好数学不只求一个最精确的答案,还要给不同场合配不同精度的工具。
三百五十五与一百一十三,这两个数是怎么找出来的?史书没有说。后来的数学家猜了几百年:有人说是用「调日法」凑的,有人说是用连分数,有人说是解不定方程。下一页先看那个最漂亮的解释。
把一个数写成「整数+一个分数的倒数」,再把这个分数同样处理,一层层套下去,叫连分数。它像剥笋:每次剥下一层整数,剩下的部分翻个个儿,接着剥。π 剥出来是这样的:
π=3+1/(7+1/(15+1/(1+1/(292+…))))
每剥一层,就截一次断,得到一个分数。截在第一层,得 3/1;截在第二层,得 22/7;第三层得 333/106;第四层得 355/113;再往下是 103993/33102。这些分数叫渐近分数,它们有一个了不起的性质:在所有分母不超过它的分数里,没有比它更接近真值的。
看这几个分数怎么逼近:3/1 差 0.1416;22/7 差 0.00126;333/106 差 0.000083;355/113 差 0.00000027。每一次都跳一个量级——因为 π 的连分数里出现了 292 这样的大数,一遇到大数,逼近就突然加速。
355/113 就是从这串笋里剥出来的第四层。它简单到只用 1、3、5 三个数字,精确到小数点后第六位——一个三位数除以三位数,胜过了七位小数。好的记号与好的分数,都是一种压缩:把冗长的信息,压进一个能上手的形式。
355/113 好在两处。第一处是准:与真值差 0.00000027,比 22/7 准了约四千八百倍。第二处是小:分母只有一百一十三,一支笔、几根筹就能算,不需要九位数的大账。
还有第三处,最难得:它是最优的。数学史家梁宗巨做过验证:在所有分母小于一万六千六百零四的分数里,没有哪一个比 355/113 更接近 π。换句话说,用这么小的分母,已经把精度用到了尽头——想更准,分母就得跳到三万三千以上(103993/33102)。
这就解释了一个常被忽略的事实:密率不是「碰巧凑出来的好分数」,它是 π 的一个结构性的「台阶」。π 的无理性格局决定了,在某些分母上会出现特别好的逼近,355/113 正是其中最漂亮的一级。
对比一下同代的世界:印度数学家耆那教典籍里有 355/113 的记载(一说公元五世纪),欧洲要到十六世纪才由奥托重新得到。而在中国,这个分数被写进史书的「律历志」,作为官方常数流传——不是某个人的私藏,是一个文明的计算底账。
也正因为它是「台阶」,后世才反复回到它:日本数学史家三上义夫建议叫它「祖率」,把这份荣誉归给那个用算筹磨了九年的人。
《大明历》里最硬的四个数,都不是「一个数」,而是「一个分数」——和密率同一个脾气:用整数之比,把除不尽的量记下来,既准又便于筹算。
回归年:三百六十五又九千五百八十九分之三万九千四百九十一日,即 365.24281481 日。今天的值是 365.24219878 日,两者差 0.000616 日——一年差五十三秒。这个精度,此后七百多年无人超过,直到南宋《统天历》。
朔望月:二十九又三千九百三十九分之一十一万六千三百二十一日,即 29.530592 日。今值 29.530589 日,差三秒不到。交点月:二十七又二万六千三百七十七分之七十一万七千七百七十七日,即 27.212230 日。今值 27.212220 日,差不到一秒。
闰周:三百九十一年置一百四十四个闰月。旧法十九年七闰,两百多年就差出一天;新法把闰月撒在更长的周期里,误差缩到一年不到一秒。这个闰周的意思是:三百九十一年里的月数(四千八百三十六个朔望月),正好等于三百九十一个回归年。
四个数放在一起看,才看得出祖冲之在做什么:他不是在「改进历法」,他是在用一套整数比,把日、月、年的三个周期锁进同一个账本。锁得越紧,历法走得越久不歪。
祖冲之不是只坐在席上摆筹的人。史书里记着他造过几样东西,每一样都让同代人吃惊。
指南车。传说上古有指南车,到南北朝已失传。齐高帝萧道成命祖冲之仿制,他「改造铜机,圆转不穷」——用一套铜制齿轮,让车上的木人无论车子怎样转弯,手臂始终指南。这不是磁针,是纯粹的机械传动:车轮转,齿轮转,木人反向补偿,方向就守住了。
千里船。他在新亭江试一艘船,「日行百余里」,当时人没见过这么快的船。船的具体形制没有留下,后世推测是改进的桨轮或车船一类。水碓磨。他在乐游苑造水碓磨,用水力带动碓与磨,齐武帝亲自去看。
这几样东西有一个共同点:都是把一种运动,精确地传给另一种运动。指南车把车轮的转动传给木人,水碓把水流的转动传给碓头,千里船把踏轮的转动传给水。这和割圆是同一副筋骨——都是把一个量,按一个固定的比例,转成另一个量。
所以他造器不是「业余爱好」,是同一套数学的另一面。会算比率的人,才造得出转得准的齿轮;懂误差的人,才知道齿轮咬合要留多少隙。第四幕把这两面放在一起,是想说:他的数学不是纸上的,是能转起来的。
历法不是文人的雅好,是国家的日程表。什么时候播种,什么时候收税,什么时候祭天,什么时候出兵,都按历法走。历法差一天,农时就差一天;差得多了,「春分」落到「清明」后头,整套秩序就乱了。
更要紧的是日月食。古人视日月食为天意,朝廷要提前知道、提前行礼。要预报日月食,得知道三件事:月亮走多快、太阳走多快、月亮在哪个点上穿过黄道(交点)。第三件事就是交点月——祖冲之把它算到了 27.212230 日,误差不到一秒。
他拿这个数去验旧账:从元嘉十三年(四三六年)到大明三年(四五九年),二十三年间有四次月食,用《大明历》推算的时刻,与实际发生的时刻全部相合。这不是运气,是常数的精度够了。
所以第四幕的四个数,不是四个孤立的数字,是一张网:回归年定「年」,朔望月定「月」,交点月定「食」,闰周把三者锁在一起。四根绳子绷紧,历法才站得住。
换句话说,355/113 与《大明历》是一件事的两头:一头是把圆算准,一头是把天算准。同一个「准」字,一头落在纸上,一头落在天上。
第四幕从一个「不好用」的七位小数出发,账清一清。
分数是压缩。355/113 只用了三个数字,把 3.1415926 的精度压进一个能上手的形式;22/7 更简,精度差些。约率给工匠,密率给历官——同一件事,两种精度,各得其所。
它是最优的。分母小于一万六千六百零四的分数里,没有比 355/113 更接近 π 的。它不是碰巧凑出的好数,是 π 的结构里一个真实的「台阶」。
同一副筋骨造器。指南车、千里船、水碓磨,都是把一个运动按固定比例传给另一个运动——与割圆同一个思路。历法的四个常数,则是把日、月、年锁进一本账。准,是这一切的共同标准。
密率 355/113=3.14159292…,误差 2.7×10−7;约率 22/7=3.142857…,误差 1.3×10−3。两者相差约四千八百倍。
《大明历》:回归年 365+9589/39491 日;朔望月 116321/3939 日;交点月 717777/26377 日;闰周 391 年 144 闰。
祖冲之写过一部《缀术》,六卷(一说五卷)。「缀」是缀合、连缀的意思——把自己的专论缀在刘徽的注后面。这部书在唐代是国子监算学的课本,学官要讲四年,是当时最深的一门算学课。
然后它消失了。北宋时官家搜求天下遗书,《缀术》已不可得;此后一千年,只有目录书里还留着它的名字。一个能把圆周率算到七位的人,他到底怎么算的,就这样成了一个永久的空白。
奇怪的是,他的数没有跟着消失。《隋书·律历志》里有一段不到百字的记载,把他的圆周率原原本本抄了下来:「宋末,南徐州从事祖冲之更开密法,以圆径一亿为一丈,圆周盈数三丈一尺四寸一分五厘九毫二秒七忽,朒数三丈一尺四寸一分五厘九毫二秒六忽,正数在盈朒二限之间。密率:圆径一百一十三,圆周三百五十五。约率,圆径七,周二十二。」
写这段的是唐初的史官,离祖冲之已一百多年。他们大概并不懂割圆,只是照抄了前朝的历志。可就是这一次照抄,把一个文明最精密的计算保存了下来——书可以烧,数抄进了另一本书。
这也是古代科学常见的命运:著作散佚,成果靠「引用」活着。祖冲之的幸运,是被一部正史的「律历志」捎带上了;不幸的是,捎带的只有结果,没有方法。
祖冲之的儿子祖暅,接过了父亲没做完的活。他留下的名字,绑在一条原理上:幂势既同,则积不容异——两个等高的立体,如果在每一个高度上截出的面积都相同,那么它们的体积一定相同。
这条原理今天叫「祖暅原理」,西方叫「卡瓦列里原理」(1635 年)。它的用处是:把一个算不出的立体,换成一个算得出的立体。像一摞书,推斜了,每层的面积没变,整摞的体积就没变。
父子俩用它解决了球体积。刘徽当年留下一个难题:球的体积与外切圆柱的体积之比,应当是 π 比 4;可要证明这一点,得先算出「牟合方盖」——两个同样粗细的圆柱垂直相交,公共部分的体积。刘徽算不出,叹了一句「敢不阙疑,以俟能言者」。
祖氏父子把它算出来了。他们把牟合方盖切成八块,取其中一块,再切成「外三棋」,一块块拼补,证明这块占所在立方体的三分之一——于是牟合方盖占三分之二,球占 π/4,合起来得球体积 (4/3)πR3。
这个结果,阿基米德在七百年前已经得到(见第 11 册)。两条路各自走通,工具不同,结论一样。数学的有趣就在这里:山可以有不同的爬法,山顶只有一个。
刘徽写下过一句话:「割之又割,以至于不可割,则与圆合体而无所失矣。」割了再割,割到不能再割,多边形就与圆合成一体,一点不差。这句话,是极限思想的种子。
祖冲之做的是把这颗种子种下去:他不谈「不可割」,只谈「割到第几层,误差多少」。这是从哲学到算术的一步——把「无穷」换成了「足够多」。十七世纪的微积分,做的正是这个转换:不谈无穷小,谈「任意小的误差」。
所以数学史上常把这三个人排成一条线:阿基米德的穷竭法、刘徽的割圆术、祖冲之的七位小数。三个人都在「用直的量曲的」,都在「用有限的步骤逼近无限的过程」。差别在工具:希腊人用几何与归谬,中国人用筹算与递推,近代人用代数与极限。
再往后一步,是柯西与魏尔斯特拉斯把「任意小」写成 ε 与 δ(第 16 册)。到那时,「割之弥细」才有了一副不会漏风的逻辑骨架。可骨架里的那块肉——「逼近」这个念头——是公元三世纪到五世纪的三个人给的。
这就是第五幕要说的「远」:祖冲之不知道微积分,可他的工作里已经有一颗微积分的种子。数学的传承,常常不是「传递结论」,而是「传递一个动作」——割、夹、逼近。
355/113 在欧洲出现,要等到一五七三年。德国数学家奥托(Valentinus Otho)在《巴拉丁努斯算术》的附录里给出这个值,方法与祖冲之无关——他是从别的途径算出来的。欧洲人给它起了个名字,叫「Metius 值」,因为荷兰人阿德里安·梅蒂乌斯也独立得到过。
一千年。这中间,中国的算学走过了唐、宋、元,出现了秦九韶的高次方程、朱世杰的四元术、杨辉的垛积术;欧洲走过了经院哲学、文艺复兴、印刷术。两条线各自走了很远,然后在同一个分数上碰了头。
碰头之后,两边的反应不一样。欧洲人把它当成一个「好用的近似」,写进教科书;中国人把它写进正史的「律历志」,当成国家的常数。前者是学者的发现,后者是文明的底账——一个数被官方记住,比被某个人记住更难。
十九世纪末,西方数学史家开始系统研究中国算学。他们惊讶地发现:这个分数不是欧洲人先得的。日本学者三上义夫在二十世纪初提议,把它叫作「祖率」——用一个中国人的名字,给这个常数命名。
命名的意义不大,承认的意义很大。它意味着:在一部以希腊为源头的数学史里,必须给中国留一个位置,而且不是「早就有零碎想法」的位置,是「算得比谁都准」的位置。
一九六四年,紫金山天文台发现了一颗小行星,编号一八八八。后来它被命名为「祖冲之」。
一九六七年,国际天文学联合会把月球背面的一座环形山命名为「祖冲之环形山」。月球背面永远背对地球,那座山人类看不见——只有探测器绕到背面,才能拍到它。
这两个命名,和圆周率没有直接关系。它们是现代科学对一个古代算学家的敬礼:一个在五世纪用竹棍算数的人,名字被刻在了天上。
更实在的纪念在别处。巴黎的发现宫、莫斯科大学的礼堂,都写着他的名字;中国的邮票上印过他的像;中学课本里,每个孩子都要背「3.1415926 到 3.1415927 之间」。
但如果祖冲之自己来选,他大概会选另一样东西作纪念:那串写在《隋书》里的数,和那句「正数在盈朒二限之间」。因为那才是他真正做的事——不是给一个答案,是给一个范围。答案会被超越,范围不会:它说的是「我知道我算到了哪里」。
常有人问:花九年算一个数,值吗?这个问题,用今天的眼光看更尖锐——一台计算机一秒能算出的位数,比他一辈子算的还多。那他这九年,是不是白费?
不值,如果只看数。值,如果看三样别的东西。
第一样是方法。他留下的不是 3.1415926,是「割圆—开方—夹逼—定误差」这一整套程序。这套程序可以搬到任何「算不出的量」上:算面积、算体积、算天体轨道。方法比结果活得久。
第二样是标准。他立了一个规矩:报数要报误差。这个规矩一旦立下,后来的历家就不能只说「合天」,得说「差几分」。一个文明的计算水平,不是由最聪明的人决定的,是由「大家公认要报到几位」决定的。
第三样是态度。九年摆筹,没有观众,没有即时回报,靠的是相信「这件事值得做」。这种态度不能在短期内换成任何东西,但它是所有长期学问的地基。一个常数值九年,因为九年里长出来的不只是这个常数。
第五幕从一部失传的书出发,账清一清。
书亡数存。《缀术》在北宋失传,方法成了永久的空白;可《隋书·律历志》抄下了那串数,于是结果活了下来。古代科学的命运,常常靠「被引用」延续。
父子接棒。祖暅以「幂势既同,则积不容异」解决了刘徽留下的牟合方盖,得球体积 (4/3)πR3——与阿基米德殊途同归。
千年重逢。355/113 在 1573 年由奥托在欧洲重新得到;二十世纪,三上义夫提议称之为「祖率」。名字刻上了月球,可真正的纪念是那句「正数在盈朒二限之间」——他给的不是答案,是范围。
祖暅原理:等高两立体,若每层截面积相等,则体积相等。由此 V球=(4/3)πR3。
极限的种子:割圆(刘徽)→ 七位区间(祖冲之)→ 穷竭法(阿基米德)→ ε-δ(柯西、魏尔斯特拉斯)。四次跳跃,同一个动作:逼近。
一册走完,回头看祖冲之留下的东西,其实是三样。
一个区间。3.1415926 与 3.1415927 之间。这不是一个数,是一句话:「真值在这个范围里。」他给的不是答案,是答案的边界。这种诚实,比答案本身更难。
一个分数。355/113。三个数字,胜过七位小数;分母一百一十三,一支笔就能算。它证明了一件事:好的数学不只是「更精确」,还是「更好用」。
一部历。《大明历》。岁差第一次入历,闰周从十九年七闰改成三百九十一年一百四十四闰,交点月定到一秒之内。它在祖冲之生前没被采用,死后十年才颁行,一用八十年。
三样东西,一个共同的底色:他从不掩饰自己算到了哪里。这一点,让他的工作在两千年后仍然站得住——因为一个知道误差的数,永远不会过时;过时的只是误差的大小。
祖冲之死后,他的两件东西走了两条完全不同的路。
《大明历》活了。梁天监九年(五一〇年)正月,梁武帝下诏颁行,此后梁、陈两朝沿用,一直到陈亡(五八九年),整整八十年。一部被压了四十八年的历法,最终成了南朝后半段的官方时间表。它的回归年值,直到七百年后的《统天历》才被超过。
《缀术》死了。它在唐代还是国子监的课本,学官讲四年,是算学里最深的一门;到了北宋,官府刻印算经时已经找不到完本。此后一千年,只剩书目里一个名字,和几条被别的书引用的片段。
两条路的差别,说到底是「载体」的差别。历法是公器,一旦颁行,就抄进历书、写进史志、发到州县,想丢也丢不掉;算书是私学,靠师徒抄录、靠注家引用,一遇战乱就断。文明的记忆,不只取决于内容多好,还取决于它被放在多结实的架子上。
所以今天读祖冲之,读到的是一具「骨架」:数在,方法没了。这不是他一个人的遗憾,是古代科学共同的遗憾——我们常常只知道他们算出了什么,不知道他们怎么算的。
他怎么算的?这是最大的空白。《缀术》失传,我们只知道结果,不知道过程。后人推测他用了割圆术,算到一万二千二百八十八边或二万四千五百七十六边;也有人推测他另有巧法——「缀术」这个名字,本身就像一种「缀合」的技巧。可推测归推测,没有一本他的书来作证。
密率怎么来的?355/113 太漂亮了,漂亮得不像算出来的。有人说是用何承天的「调日法」凑的:拿两个已知的近似值,按比例调配,凑出更准的分数。有人说是用连分数(可那时候中国还没有连分数)。有人说是解不定方程。三条路都走得通,没有一条有史料。
书为什么丢?《缀术》在唐代是官学课本,按理不该丢。可它「深」——深到能讲的人少,抄本也少;一遇唐末五代战乱,就断了。同类的还有《九章算术》的某些注本、祖暅的著作。古代科学的传承,靠的是「人」不是「制度」,人一断,书就断。
这三个问题,两千年来没人能答。它们的价值不在答案,在提醒:我们看到的「历史」,是被抄写、被引用、被保存下来的那一小部分。没被保存的,比保存下来的多得多。
所以读古代数学,要有一份自觉:我们读到的是「幸存者」。祖冲之的七位小数能留下来,一半靠他的本事,一半靠《隋书》那位不知名史官的一次照抄。
材料:四十根左右的竹签、棉签棒或吸管(长短一致),一块平整的桌面或一张大纸。
第一步,认两种摆法。纵式:一至五用竖棍的根数表示;六至九是一根横棍压在竖棍上(压一根是六,压四根是九)。横式:一至五用横棍;六至九是一根竖棍压在横棍上。两套并排摆出来,一眼能看出区别。
第二步,摆一个多位数。个位用纵式,十位用横式,百位纵、千位横,依次相间。哪一位是零,就空出一段。试着摆出 2026:千位横式「二」,百位空,十位横式「二」,个位纵式「六」。
第三步,摆祖冲之的数。把 3.1415926 摆成「三丈一尺四寸一分五厘九毫二秒六忽」——从丈到忽,一共八位,每一位摆一组筹。摆完数一数:一共用了多少根?再摆 355/113:分子三百五十五在上,分母一百一十三在下,中间留一道缝。
想一想:为什么古人要「纵纵横横」地摆,而不全用竖棍?如果全用竖棍,一千一百一十一会摆成什么样子?还认得出哪一位是千位吗?
做法一:量。找三个大小不同的圆——杯口、碗口、锅盖。用一根细绳绕圆周一圈,在接头处捏住,再把绳拉直,用尺量出绳长(周长);再量直径。周长除以直径,记下结果。
三个圆量完,多半会得到三个不同的数:3.1、3.2、3.05……这不是算错了,是量不准。绳子有粗细,绕的时候有松紧,尺子的刻度只到毫米。圆越小,相对误差越大。换个更大的圆(比如自行车轮),结果会更靠近 3.14。
做法二:算。取一个直径为一的圆,用计算器填表:正六边形面积 2.598;十二边 3.000;二十四边形 3.106;四十八边 3.133;九十六边 3.139;一百九十二边 3.1410。每翻一倍,就把答案往 3.14159 推近一点。
做法三:夹。把内接的数与外切的数并排写:九十六边,内接 3.13935,外切 3.14327。真值一定在这两个数之间。再算一九二边:内接 3.14103,外切 3.14271。缝隙从 0.004 缩到 0.0017——每翻一倍,缝缩到约四分之一。
想一想:要缝缩到 0.0000001,还得翻几倍?祖冲之翻了七倍,用了九年。今天的计算器按一下 sin 键,抵得上他摆一天筹。
祖冲之的算筹,是中国「算的器具」链条上的一环。这条链很长:先秦的算筹,宋元的珠算,明代的算盘,近代的计算尺与机械计算机,二十世纪的电子计算机,一直到今天口袋里的手机。
每一次换代,换的都是「速度」,不换「算法」。算盘打的是口诀,口诀背后是筹算的位值;计算机跑的是程序,程序背后是同一个「按规则一步步算」的念头。祖冲之的割圆程序——给初值、按公式迭代、看误差停手——今天仍然写在每一本数值分析的教科书里。
速度的差别有多大?祖冲之算到七位小数,用了以年计的时间;一九四九年,ENIAC 算到两千零三十七位,用了七十小时;二〇二二年,一台云服务器算到一百万亿位,用了几个月。位数从七位到一百万亿位,涨了十四万个数量级,可方法的骨架没变。
这也是数学史上有意思的一点:工具会过时,方法不会。算筹早就不用了,可「割圆」这个动作还在——今天的计算机算 π,用的是无穷级数,本质仍是「用一串可算的项,逼近一个算不尽的数」。
所以不必替祖冲之惋惜「他要是有一台计算机就好了」。他有的东西,计算机没有:在没有工具的时候,想出工具。这才是最难的一步。
公案一:《缀术》究竟写了什么?唐代算学把它列为「十部算经」之一,学四年,比《九章算术》还多一年。一本要学四年的书,内容一定不浅。有学者推测它含割圆的高级技巧、球体积的完整推导、甚至某种内插法;也有人认为它是祖冲之父子论文的合集。书佚之后,所有推测都只能是推测。
公案二:密率是凑的还是算的?「调日法」是一条实在的路:拿两个已知近似值(比如 22/7 与 157/50),按「强弱」比例调配,可以凑出很接近的分数。用这套方法,从 3.1415926 出发,经过若干次调配,确实能得到 355/113。但这只是「可行」,不是「他确实这么做过」。
两条公案的共同点:结果确凿,路径成谜。这也正是古代数学史研究的常态——我们面对的不是完整的著作,是别人转抄的几句话,和几件出土的器物。
延伸阅读(给想往下走的人):钱宝琮《中国数学史话》、李俨《中国算学史》、梁宗巨《世界数学史简编》、薮内清《中国の天文暦法》;《九章算术》与刘徽注的校点本(郭书春汇校本);《隋书·律历志》的现代整理本。外文可看 Needham《中国科学技术史》第三卷数学章、Martzloff《A History of Chinese Mathematics》。
读这些书会发现一件事:关于祖冲之,能确证的材料只有几页;可就是这几页,撑起了中国数学史最重要的一章。史料的多少,不等于分量的轻重。
这一册讲一个人怎样把「差不多」变成「差多少」:祖冲之算圆周率,不给一个近似值,给一个上下界;造历法,不说「合用」,说「一年差五十秒」。
路线五步:前人的圆周率够不够用(第一幕)、割圆术怎么割(第二幕)、十二年边与那场九年的长征(第三幕)、355/113 怎么来(第四幕)、书失传而数留下(第五幕)。两个动手做(p.44–p.45)都建议先做后读:摆一次算筹,就知道「位值」不是抽象概念;量三个圆,就知道「量不准」是真的。
暗线是「把差不多说成差多少」,本册给了五层:率差会随尺寸放大(第一幕)、夹逼给出区间(第二幕)、误差有节奏(第三幕)、分数是压缩(第四幕)、方法是遗产(第五幕)。孩子最容易记住的是「3.1415926 到 3.1415927 之间」——就从这句话讲起,再补一句:他为什么不说「等于 3.14」。
需要提醒的一点:本册的数学比第一辑同册稍深(面积、开方、连分数)。三层读法照旧——故事层可以独立成篇;数学层的 p.28(连分数)与 p.30(历法常数)可以跳过,不影响主线;注疏层给大人核对。
「祖冲之是不是最早算出圆周率的人?」——不是。阿基米德在公元前三世纪就把 π 夹在 223/71 与 22/7 之间;刘徽在公元三世纪算到 3.141024。祖冲之的贡献是把精度推到七位小数,并保持世界纪录约九百年(直到十五世纪阿尔卡西)。先有「夹」,才有「精」。
「他为什么不算到更多位?」——成本。每多一位,边数要翻三倍多,开方的位数也要加。第七位够历法用(一年差五十几秒),第八位要再赔几个月。这是一个理性的「停」,不是能力的「止」。
「孩子问:算这个有什么用?」——短期没用,长期有大用。历法、授时、天文、地图、机械,都要常数;常数准一寸,下游准一丈。更重要的是方法:割圆、夹逼、误差控制,是今天所有数值计算的老祖宗。
虚实成分说明。本册的场景与对话有虚构成分(将作监的车轮、娄县的后院、朝堂的具体问答),凡年代、数据、引语、书名均在注中给出处。特别提醒:祖冲之割圆的具体方法无史料(《缀术》佚),本册取「割圆术」为主线,属主流推测而非定论;p.43 与 p.49 已把这个边界说清。
《数学家的故事》第二辑 · 第 12 册
祖冲之 · 算筹九年
明线:割圆术与盈朒二限 · 3.1415926<π<3.1415927 · 约率 22/7 与密率 355/113 · 《大明历》岁差、闰周、交点月 · 祖暅原理与球体积
暗线:把「差不多」说成「差多少」 · 误差是一种诚实 · 方法比结果活得久
时代:429—500 · 南朝宋、齐(建康—南徐州—娄县—建康;下延至 510 年《大明历》颁行、1573 年奥托重得密率、1913 年「祖率」命名)
主典:《九章算术》及刘徽注 · 《周髀算经》 · 《宋书·律历志》 · 《南齐书·祖冲之传》 · 《隋书·律历志》 · 《缀术》(佚)
体例:扉页与题解 2 页 · 引子 3 页 · 五幕 35 页(每幕:故事 1 · 数学 3 · 故事/暗线 1 · 交汇 1 · 小结 1)· 收束与留问 3 页 · 动手做 2 页 · 小典 2 页 · 延伸 2 页 · 家长导读 2 页 · 版权 1 页,共 52 页。
《数学家的故事》第二辑十册:阿基米德 · 祖冲之 · 牛顿 · 莱布尼茨 · 欧拉 · 柯西 · 阿贝尔 · 庞加莱 · 诺特 · 华罗庚。本册为第二辑第二册。