刘徽《九章算术》注与祖冲之计算圆周率之谜2018年1月南京ZOU简介背景绿色内容,引自于《九章算术》(包括刘徽为之写的注文)。阿基米德最早采用圆内接正多边形和圆外切正多边形,双向逼近圆的周长。刘徽采用圆内接正多形面积及其加一个矩形的面积,双向逼近圆的面积。两个方案都比较直观,理论上也没有疑问。如何精确计算圆周率,实质看其具体的计算方法。几何法计算圆周率,都绕不过开方运算。如何精确可靠地计算开方值,是祖冲之计算圆周率的关键。如果按《九章算术》刘徽注文的思路去尝试,祖冲之1到2天就能可靠地筹算出8位圆周率,计算量及复杂程度远低于大家的预期!假令圆径二尺,圆中容六觚之一面,与圆径之半,其数均等。合径率一而弧周率三也。又按:为图,以六觚之一面乘一弧之半径,三之,得十二觚之幂。若又割之,次以十二觚之一面乘一弧半径,六之,则得二十四觚之幂。割之弥细,所失弥少。割之又割,以至于不可割,则与圆周合体而无所失矣。。刘徽割圆术(一)刘徽从圆内接正六边形开始,不断割圆,他在《九章算术》的圆田术中,对割圆术所写的注文如下:刘徽割圆术(二)刘徽割圆术(三)ABCDO勾股弦小勾小股割六觚以为十二觚术曰:置圆径二尺,半之为一尺,即圆里觚之面也。令半径一尺为弦,半面五寸为句,为之求股。以句幂二十五寸减弦幂,余七十五寸,开方除之,下至秒、忽。又一退法,求其微数。微数无名知以为分子,以十为分母,约作五分忽之二。故得股八寸六分六厘二秒五忽五分忽之二。以减半径,余一寸三分三厘九毫七秒四忽五分忽之三,谓之小句。觚之半面又谓之小股。为之求小弦。其幂二千六百七十九亿四千九百一十九万三千四百四十五忽,余分弃之。弦OB=1,勾DB=0.5,股幂OD=1–DB=1–0.25=0.7522股OD=√1–DB=0.8660254(五分忽之二)小勾DC=1–OD=0.1339746(五分忽之三)小弦幂AC=DC+DB=0.2679491934452222已知圆内接正6边形的边长为1,求出圆内接正12边形边长的平方,有两步复杂的运算:一次开方和一次平方。小弦刘徽割圆术(四)ABCDO勾股弦小勾小股割十二觚以为二十四觚术曰:亦令半径为弦,半面为句,为之求股。置上小弦幂,四而一,得六百六十九亿八千七百二十九万八千三百六十一忽,余分弃之,即句幂也。以减弦幂,其余开方除之,得股九寸六分五厘九毫二秒五忽五分忽之四。以减半径,余三分四厘七秒四忽五分忽之一,谓之小句。觚之半面又谓之小股。为之求小弦。其幂六百八十一亿四千八百三十四万九千四百六十六忽,余分弃之。弦OB=1,勾幂DB=0.267949193445/4=0.0669872983612小勾DC=1–OD=0.0340742(五分忽之一)小弦幂AC=DC+DB=0.068148349466222股OD=√1–DB=0.9659258(五分忽之四)2已知圆内接正12边形边长的平方,求出圆内接正24边形边长的平方,有两步复杂的运算:一次开方和一次平方。其他以此类推。。。小弦刘徽割圆术(五)刘徽计算圆内接正多边形的边长,小结如下:假设圆内接正n边形的边长为Xn,已知X6=1,通过勾股定理可以计算出X12、X24、X48……222每次割圆,复杂的运算主要是一次开方和一次平方刘徽割圆术(六)...开方除之,得小弦一寸三分八毫六忽,余分弃之,即四十八觚之一面。以半径一尺乘之,又以二十四乘之,得幂三万一千三百九十三亿四千四百万忽。以百亿除之,得幂三百一十三寸六百二十五分寸之五百八十四,即九十六觚之幂也...忽略单位换算,圆内接正48边形边长X48=13.0806圆内接正96边形面积S96=X48*24=13.0806*24=313.9344=313+584/625...开方除之,得小弦六分五厘四毫三秒八忽,余分弃之,即九十六觚之一面。以半径一尺乘之,又以四十八乘之,得幂三万一千四百一十亿二千四百万忽,以百亿除之,得幂三百一十四寸六百二十五分寸之六十四,即一百九十二觚之幂也。忽略单位换算,圆内接正96边形边长X96=6.5438圆内接正192边形面积S192=X96*48=6.5438*48=314.1024=314+64/625以九十六觚之幂减之,余六百二十五分寸之一百五,谓之差幂。倍之,为分寸之二百一十,即九十六觚之外弧田九十六所,谓以弦乘矢之凡幂也。加此幂于九十六觚之幂,得三百一十四寸六百二十五分寸之一百六十九,则出圆之表矣。差幂=S192-S96=105/625,凡幂=2*105/625=210/625S96+凡幂=314+169/625,比圆的面积略大故还就一百九十二觚之全幂三百一十四寸以为圆幂之定率而弃其余分。以半径一尺除圆幂,倍之,得六尺二寸八分,即周数。…还是取S192≈314,计算出圆周为6.28,圆周率为3.14。S192比圆的面积略小。刘徽割圆术(七)ABCDO半径为1的圆Sn为圆内接正n边形面积S2n为圆内接正2n边形面积S为圆的面积S2nSSn+2*(S2n–Sn)因为三角形BDC与CEB面积相等Xn为圆内接正n边形边长S2n=Xn*n/2圆内接正多边形面积与边长的关系刘徽计算圆面积的范围,小结如下:EF刘徽割圆术(八)由于X6=1,可以求得X12、X24、X48……Xn/2、Xn,再开方两次求得Xn/2、Xn由于S2n=Xn*n/2,Sn=Xn/2*n/4S2nSSn+2*(S2n-Sn)即:只要计算出圆内接正n/2和n边形边长,就能确定圆周率的范围。22222因此上述不等式等价于Xn*n/2πXn/2*n/4+2*(Xn*n/2–Xn/2*n/4)《九章算术》方田第三十一、三十二题中,圆面积计算公式为:即S=(π*r)*r,此处r=1,所以S=π半周半径相乘得积步刘徽割圆术几何计算可被简化之处(一)ABCDOAB=Xn为圆内接正n边形的边长AC=X2n为圆内接正2n边形的边长半径为1的圆X2n2﹦2-4-Xn2边长递归公式简化后每次割圆,复杂的运算主要是一次开方、不需要平方运算AC=AD+CD222=AD+(1-OD)=AD+1–2*OD+OD=2–2*OD2222=2–2*√1-AB/42利用边长递推公式可以得到边数为6*2的正n边形的边长Xn如下:4-12+2+…2+…2-m次开方最后这次不计入mXn=m刘徽割圆术几何计算可被简化之处(二)X2n2﹦2-4-Xn2精确计算圆周率等同于高精度开方无论是刘徽割圆术面积的双向逼近、还是阿基米德内接圆外切圆的双向逼近,无论祖冲之是否简化了刘徽割圆术的几何计算,古典的几何法计算圆周率,最关键的运算都是开方!开方!刘徽割圆术计算圆周率上限,比阿基米德割圆术收敛更快。割圆术求圆周率的关键运算是开方Xn*n/2πXn/2*n/4+2*(Xn*n/2–Xn/2*n/4)求出Xn离不开开方运算《九章算术》第四卷少广,详细介绍了开方术,概要如下:《九章算术》的开方术因为:(1)解2次方程不方便;(2)当数位比较多时,估算b需要做多位数除以多位数的除法;所以:筹算开方采用试乘,但多次试乘的运算量比较大,也容易出错。当开方的位数比较多时(例如十多位),此法筹算开方是高难度挑战。刘徽的开方术–近似计算《九章算术》第四卷少广的开方术如下:AB+Δ2BB+Δ2B+1AB+++λ10λ10012≈……大意如下:对A开方开不尽,而A=B+Δ2术或有以借算加定法而命分者,虽粗相近,不可用也。凡开积为方,方之自乘当还复有积分。令不加借算而命分,则常微少;其加借算而命分,则又微多。其数不可得而定。故惟以面命之,为不失耳。譬犹以三除十,以其余为三分之一,而复其数可以举。不以面命之,加定法如前,求其微数。微数无名者以为分子,其一退以十为母,其再退以百为母。退之弥下,其分弥细,则朱幂虽有所弃之数,不足言之也。刘徽为此写的注文如下:术曰:置积为实。借一算,步之,超一等。议所得,以一乘所借一算为法,而以除。除已,倍法为定法。其复除,折法而下......近似值的范围近似值表达式。微数为十进制分数,其实质等同于十进制小数。祖冲之利用刘徽的开方术实现高精度开方(一)祖冲之熟读过《九章算术》,能准确理解刘徽注文的涵义,并且他善于筹算。按刘徽的近似计算思路,祖冲之利用刘徽开方近似值的上下限范围计算出刘徽的第1个微数:λ101≈A-B2B2然后验算开方近似值的平方是否与A相等或与A还有多少差距:祖冲之利用刘徽的开方术实现高精度开方(二)如果加了一个微数之后开方近似值的平方与A还有差距,很容易想到用同样的方法计算出第2个微数λ1002≈A-B2B211同样的方法,祖冲之想开方的精度要几位都可以!再次验算开方近似值的平方是否与A相等或与A还有多少差距:祖冲之利用刘徽的开方术实现高精度开方(三)开方每增加1个微数精度的运算总结:上面三种运算,使用算筹计算都很方便。利用上述方法,祖冲之可以将复杂的高精度开方运算,转化为简单的加乘运算。祖冲之利用刘徽的开方术实现高精度开方(四)当被开方数A在区间[3,25)的时候,上述开方仅会涉及到1~2位数除以1位数的除法(四舍五入取1位结果,容易心算出来)、多位数乘以1位数的乘法(乘除10因为很简单不计入2位数乘除法)及多位数加减法。实际运算过程中由于使用四舍五入,如果发现λk大于或等于6,则应在已算出的第(k-1)个微数的基础上,在不增加微数个数的前提下,按计算微数的方法再计算一次第(k-1)个微数,以便减小的值,避免计算时需要用2位数乘以多位数的乘法。祖冲之利用刘徽的开方术实现高精度开方(五)为了简化计算,当被开方数A不在区间[3,25)的时候,可先对A做预处理如下:区间(1,3)内的数值可以先乘以4之后再开方;区间(25,100)内的数值可以先除以4之后再开方;区间(0,1)内的数值可以先乘以10的偶次方之后再开方;100以上的数值可以先除以10的偶次方之后再开方。祖冲之利用刘徽的开方术实现高精度开方(六)下面举个例子来说明开方过程,例如对A=这个数进行开方,开方值为B,逐位增加开方值B的微数4++++610710081000910000两位除以一位的除法四舍五入的结果祖冲之利用刘徽的开方术实现高精度开方(七)两位除以一位的除法一位乘多位的乘法四舍五入的结果祖冲之利用刘徽的开方术实现高精度开方(八)两位除以一位的除法一位乘多位的乘法四舍五入的结果四舍五入的结果祖冲之利用刘徽的开方术实现高精度开方(九)上述计算表面看起来有点吓人,其实用算筹计算时很简单,分数中零的个数主要用来对准算筹的位置,例如8/1000表示8在整数位之后的第3个算筹位上。刘徽所称的微数,实质就是十进制小数。将上述“计算第3个微数”的步骤改写成“计算第3个小数位”如下,大家就不会觉得它复杂了:祖冲之利用刘徽割圆术筹算圆周率所需时间(一)通过高精度筹算开方法,可以求出Xn的准确值。当割圆次数为12时,圆周率3.1415926π3.1415927。计算过程需要进行14次开方运算,开方最少要保持小数点后15位。Xn*n/2πXn/2*n/4+2*(Xn*n/2–Xn/2*n/4)如果祖冲之没有对刘徽割圆术的几何计算方法进行简化,则计算过程中除了14次开方运算之外,复杂的运算还包括12次平方运算,平方最少要保持小数点后15位。祖冲之利用刘徽割圆术筹算圆周率所需时间(二)如果祖冲之对刘徽割圆术的几何计算方法进行过简化,则仅需做如下14次开方:S24576=0.000255663464343*24576/2=3.141592649846784S12288=0.000511326923797*12288/2=3.141592619808768按刘徽割圆术确定圆的面积范围:S24576πS12288+2*(S24576-S12288)可得:3.141592649846784π3.1415926798848,简化为3.1415926π3.1415927割圆次数内接正多边形边数被开方数开方结果被开方数开方结果61123.0000000000000001.7320508075688772243.73205