解决方案
目前,您的脚本设置为添加从1到1000的所有奇数。
要执行该产品,您只需将product的起始值更改为1并在循环内相乘:
product = 1;
for i = 1:2:1000
product = product * i;
end
但是,创建一个向量并使内置prod函数执行乘法更快:
product = prod(1:2:1000);
问题
默认情况下,MATLAB在默认的64位数字中没有足够的内存来计算此产品的确切值。
这个数字太大了,因为这实际上是一个因子。
你会发现MATLAB为你正在乘以的500个数字返回Inf,并且它最多只能包含150个元素。
事实上,使用浮点运算,使用浮点数的前17位数字为only accurate up to 15 digits(整数也在该级别饱和)。
使用Mathematica(由于我感觉懒惰,它可以开箱即用地执行任意数字算术),我可以看到答案需要至少1300位精度,我们可以让MATLAB通过符号来完成工具箱的vpa功能:
digits(1300);
p = vpa(1);
pint = vpa(1);
for k = 2:N
pint = pint*p(k);
end
disp(pint);
>> StackOverflow
10074832976375085400403891739230353825032341858355041570501377751333484793086