tongxin28 发表于 2006-6-4 23:01

[讨论]branch请进

对这个公式我编了个程序:
a=input('a=');
m=input('m=');
p=1;s=1;
for i=1:m
t=a^i;
p=p*i;
s1=t/p;
s=s+s1;
end
y=s1/s;
fprintf('y=%.8f\n',y);
我发现,当输入的m和a较小时,最后的y值可以计算出来,但当输入的值较大,比如m=120,a=30时就无法计算出结果,这是怎么回事?计算量超出了?

bainhome 发表于 2006-6-5 01:43

n = realmax
浮点double数据类型的最大值约为:1.7977e+308
大了的确玄乎。

branch 发表于 2006-6-5 02:17

楼上的讲得很有道理,数值太大的时候应该考虑消去某部分或者做一下除法
同时提醒您,如果找我的话,直接发短消息就可以的。不要点名发帖子,这样会错过一些能帮你解决问题的朋友!!

tongxin28 发表于 2006-6-5 10:16

呵呵。谢谢了。那我编的那个程序有什么问题没?

branch 发表于 2006-6-5 12:54

a m数值较小时是没问题的,如果大了的话a^m就会很大超出精度范围,也就是得出inf这样的东东。
从式子分析,它趋近0.5吧(大概)!你看能不能把分子除下来!!!
这样分子分母的话都在精度范围内
页: [1]
查看完整版本: [讨论]branch请进