主题:QB编程如何计算超大数
nianxiog
[专家分:0] 发布于 2006-09-18 22:44:00
有一个算式:kv=n•(n-1)(n-2)…(k-n+1)*0.1的K次方*0.9的(n-k)次方/K!
我编了如下算法:
Cls
Input “qishu n=”;n
Input “pingci k=”;k
T=1:u=n-k+1
For i=1 to k
T=t*i
Next i
For h=(n-k+1 ) to n
U=u*h
W=u/(n-k+1)
Next h
Kv=((w/t)*0.1^k)*0.9 ^ (n-k)
Print “kv=”;kv
End
问题是:当n取值大于377,或K大于14时,表现出overflow,我不知还要用什么指令,
特请高手帮忙给改正一下。多谢了!
回复列表 (共6个回复)
沙发
maxumi [专家分:2200] 发布于 2006-09-19 07:40:00
在CLS前面加一句: DEFDBL A-Z 就OK了
不过就算这样, 数据范围依然有限制.
板凳
nianxiog [专家分:0] 发布于 2006-09-19 09:19:00
maxumi,辛苦了!我的计算范围N>2000,K>400,我加了您的指令,还不能解决.请辞教.
3 楼
moz [专家分:37620] 发布于 2006-09-19 10:45:00
[url=http://www.programfan.com/club/showbbs.asp?id=99260]参阅<超长数运算>[/url]
指数不为正数的情况下,可以换成乘积的形式.
4 楼
moz [专家分:37620] 发布于 2006-09-19 11:19:00
Cls
Input “qishu n=”;n
Input “pingci k=”;k
T=1:u=n-k+1
For i=1 to k '没必要把阶乘算出来
T=t*i
Next i
For h=(n-k+1 ) to n '实质上也是for 1-k
U=u*h
W=u/(n-k+1)
Next h
Kv=((w/t)*0.1^k)*0.9 ^ (n-k)
Print “kv=”;kv
End
很多时候,要想想其他办法,完全没必要走得太远
试试以下代码,并检查一下计算过程是否符合要求
------------------------------------------
defdbl a-z
Cls
Input “qishu n=”;n
Input “pingci k=”;k
w=1
u=n-k
For i=1 to k
w=w*0.1*(u+i)/i
Next i
Kv=w*0.9^u
Print “kv=”;kv
End
5 楼
nianxiog [专家分:0] 发布于 2006-09-19 13:38:00
非常棒!多谢MOZ先生.您费心了,给您敬礼!
6 楼
maxumi [专家分:2200] 发布于 2006-09-19 15:08:00
恩 看来我来晚了 分被moz抢了......XD
我来回复