回 帖 发 新 帖 刷新版面

主题:QB编程如何计算超大数

有一个算式: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个回复)

沙发

在CLS前面加一句: DEFDBL A-Z 就OK了
不过就算这样, 数据范围依然有限制.

板凳


maxumi,辛苦了!我的计算范围N>2000,K>400,我加了您的指令,还不能解决.请辞教.

3 楼

[url=http://www.programfan.com/club/showbbs.asp?id=99260]参阅<超长数运算>[/url]
指数不为正数的情况下,可以换成乘积的形式.

4 楼

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 楼


非常棒!多谢MOZ先生.您费心了,给您敬礼!

6 楼

恩 看来我来晚了 分被moz抢了......XD

我来回复

您尚未登录,请登录后再回复。点此登录或注册