第一章

题目




分析

  这道题我们要利用迭代格式来求级数的和,不同的是求和的顺序,一个是从大到小而另外一个是从小到大。此题可以用循环轻松秒杀,问题是如何输出有效位数?在这个问题上我思考了很久,其实完全可以输出答案后自己看有几位,但我就是懒,想要直接输出控制台上。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clear;clc;
while(1)
N = input('请输入任意大于等于2的整数:');
if N<2
fprintf('error,please input again \n');
else
break;
end
end
SN1 = single(0);
SN2 = single(0);
for i = 2:N
SN1 = SN1 +1/(i^2-1);
SN2 = SN2 +1/((N-i+2)^2-1);
end
acuratevalue = 1/2*(3/2-1/N-1/(N+1));
fprintf('当N的次数为%d时,所取得的精确值为:%d \n',N,acuratevalue);
fprintf('若采用从大到小的顺序求得的结果为:%f \n',SN1);
fprintf('其有效位数为:%d \n',length(num2str(SN1,6))-2);
fprintf('若采用从小到大的顺序求得的结果为:%f \n',SN2);
fprintf('其有效位数为:%d \n',length(num2str(SN2,6))-2);

总结分析

  😆最后还是很方便的把有几位输出到了控制台,原理就是length函数,偷了个懒知道求出来都是小数,指定保存位数,然后数出来小数点后有几位就完事了,前面我还想那么复杂😒,心得就是大数吃小数。