主题最新回顾(发布时间:2011/6/18 15:22:00) |
---|
-- 作者:秦汉昌
-- Machin公式 |
主题最新回顾(发布时间:2011/6/13 23:11:00) |
---|
-- 作者:秦汉昌
-- 改为九位的原因是:单精度数最多表示十个十进制位,且高两位必需在27以内,所以,如果以十位为单元运算,就不能使用单精度数表示一个计算单元
也就是说,想将百亿进制优化,改为十亿进制优化。 |
主题最新回顾(发布时间:2011/6/13 23:08:00) |
---|
-- 作者:秦汉昌
-- //PI计算javascript程序,Machin+百亿进制优化,2006.12 许剑伟 莆田十中 GJ2_machin={
这段程序中,多精度数以十个十进制位(即十亿)为一个单元进行计算的,我想改为以九位十进制数为一个单元时行多精度运算,不知道需要作什么改动,如果不作发运,不知对arctg的结果有没有影响 |
主题最新回顾(发布时间:2011/6/13 20:53:00) |
---|
-- 作者:浪-淘-沙
-- 以下是引用秦汉昌在2011-6-13 20:06:00的发言:
呵呵,是我理解错了 程序的执行必须有精确的验证结果 我只是简单的估算了一下,导致认识上的错误
现在,汉编程序也调试好了
不知精确否,计算结果如下:
本算法为低速算法,计算位数不宜过大,否则计算时间太长。 恭喜你。
我刚才用JAVASCRIPT调试,将每次循环的中间变量都打印出来,没有出现你所说的疑问。 幸好你自己能够解决。 |
主题最新回顾(发布时间:2011/6/13 20:09:00) |
---|
-- 作者:秦汉昌
-- 呵呵,谢谢浪版给予耐心指导
原来,在设计时,将外循环多做了一次,即i=0的情况也迭代进去了,导致最终结果为0,而我却没有从外循环上思考,尽想着内循环的代数式的问题 |
主题最新回顾(发布时间:2011/6/13 20:06:00) |
---|
-- 作者:秦汉昌
-- 呵呵,是我理解错了 程序的执行必须有精确的验证结果 我只是简单的估算了一下,导致认识上的错误
现在,汉编程序也调试好了
不知精确否,计算结果如下:
本算法为低速算法,计算位数不宜过大,否则计算时间太长。 |
主题最新回顾(发布时间:2011/6/13 19:28:00) |
---|
-- 作者:浪-淘-沙
-- 以下是引用秦汉昌在2011-6-13 18:06:00的发言:
这两个算式,能明白,即求余数和商,除法运算,从左至右,余数f*10与右位相加继续运算
问题是: f = a[j]*i+f*10;
令N=N+1=101,所以,i=343, b=687
当第一次外循环时,i=343, b=687,a[0]=0 内循环 当j=0时,a0=0, f=0 ,第一轮内循环对数组a无影响
第二次外循环时,i=342, b=685,a[0]=2
第一次内循环: f=0, f=a[0]*i+f*10=2*342+0*10=684<b 这时:a[0]=floor(f/b)=0 在以后所有的第一次内循环中,f=a[0]*i+f*10<b都会成立
我就想不通,程序是怎么得出整数商的
外循环将a[0]l累加2,由于被除数小于除数,所以内循环又将其置0,如此循环..... 内循环 当j=0时,a0=0, f=0 ,第一轮内循环对数组a无影响
什么叫嵌套循环? 就是外循环i=343时,内循环j 从0一直到101,共做101次的计算,每次计算,都对数组a[j]进行赋值。 怎么你却理解成对数组无影响?
******************************* for(;i>0; i--,b-=2,a[0]+=2) //每计算3.4次得到1位十进制精度 就以你给的数字为例: 令N=N+1=101,所以,i=343, b=687 当第一次外循环时,i=343, b=687,a[0]=0 内循环 当j=0时,a0=0, f=0 |
主题最新回顾(发布时间:2011/6/13 18:06:00) |
---|
-- 作者:秦汉昌
-- 以下是引用浪-淘-沙在2011-6-13 17:17:00的发言:
首先你要相信,原作者那个程序是可以正常运行的,即可以计算出“圆周率”的。 那么你为何认为循环无效呢? 如果真的如你所说循环无效,那原程序又如何计算出圆周率。
然后,下面这二个语句,你是否真的看明白了? a[j] = Math.floor(f/b); 这两个算式,能明白,即求余数和商,除法运算,从左至右,余数f*10与右位相加继续运算
问题是: f = a[j]*i+f*10;
令N=N+1=101,所以,i=343, b=687
当第一次外循环时,i=343, b=687,a[0]=0 内循环 当j=0时,a0=0, f=0 ,第一轮内循环对数组a无影响
第二次外循环时,i=342, b=685,a[0]=2
第一次内循环: f=0, f=a[0]*i+f*10=2*342+0*10=684<b 这时:a[0]=floor(f/b)=0 在以后所有的第一次内循环中,f=a[0]*i+f*10<b都会成立
我就想不通,程序是怎么得出整数商的
外循环将a[0]l累加2,由于被除数小于除数,所以内循环又将其置0,如此循环..... |
主题最新回顾(发布时间:2011/6/13 17:23:00) |
---|
-- 作者:浪-淘-沙
--
呵呵,浪版,可以这个程序的算法给我讲解一下吗
你需要做的是:找一本“JAVASCRIPT”参考书,或者“C语言”的参考书,粗略学习一下“英文”编程的原理。
原作者的PI代码,本身并不难理解。 一行行看下去,for循环一点都没你所说的“无效循环”。 |
主题最新回顾(发布时间:2011/6/13 17:20:00) |
---|
-- 作者:浪-淘-沙
-- 在下一次循环中,由于f被 重新赋0值,所以,与第二次循环的运行结果一样,以此类推,这个循环嵌套无意义。
呵呵,请高手指点,我这样分析,正确否? 我觉得你还是没明白for循环的原理啊。 什么叫下一次循环中,f被重赋值啊?
for循环中,第一个分号“;”之前的语句,在循环中只执行一次啊。难道你理解成它每次都要执行的? |