|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:1-1/3+1/5-1/7+1/9.... 求共五十项之和
我的代码
#include <stdio.h>
int main()
{
int i = 1;
float y;
double s = 1.0;
int k = -1;
double sum=0;
for (; i<=50; i++)
{
if (i % 2 != 0 &&i!=1)
{
y = (float)i;
sum = 1.0/ y;
s += k*sum;
k = -k;
}
}
printf("%f\n", s);
system("pause");
return 0;
} 结果是 0.795394
网上代码 结果是 0.780399
#include<stdio.h>
int main()
{
long n;
while (scanf_s("%ld", &n) != -1)
{
double s = 0.0;
int i, a = 1;
for (i = 1; i <= 2 * n - 1; i += 2)
{
if (((i + 1) / 2) % 2 == 1)
s += 1.0 / i;
else
s -= 1.0 / i;
}
printf("%.5f", s);
}
return 0;
}
为什么结果差精度?? 求助
本帖最后由 wutianlong220 于 2021-10-28 23:56 编辑
我仔细算了,你的题目其实并没有问题,你的精度是对的。你仔细看你网上找过来的那段代码,
如果整理一下其实是这样的:
- #include<stdio.h>
- int main()
- {
- long n;
- while (scanf("%ld", &n) != -1) {
- double s = 0.0;
- int i, a = 1;
- for (i = 1; i <= 50; i += 2) {
-
- if (((i + 1) / 2) % 2 == 1) {
- s += 1.0 / i;
- } else {
- s -= 1.0 / i;
- }
-
-
-
- }
- printf("%.5f", s);
- }
- return 0;
- }
复制代码
因为他的精度是需要手动输入需要求的位数,我们把他的代码改一下,把手动输入的那个地方去掉,代码就变成了这样:
- #include<stdio.h>
- int main()
- {
- //long n;
- //while (scanf("%ld", &n) != -1) {
- double s = 0.0;
- int i, a = 1;
- for (i = 1; i <= 50; i += 2) {
-
- if (((i + 1) / 2) % 2 == 1) {
- s += 1.0 / i;
- } else {
- s -= 1.0 / i;
- }
-
- printf("%d %f %f\n",i, 1.0/i , s); //这一段是我自己加的,用来打印精度
-
- }
- printf("%.5f", s);
- //}
- return 0;
- }
复制代码
和你的代码一样,都是前50项的和相加,我这边算出来的结果是:
然后再看看你的代码:
- #include <stdio.h>
- int main()
- {
- int i = 1;
- float y;
- double s = 1.0;
- int k = -1;
- double sum=0;
- for (; i<=50; i++)
- {
- if (i % 2 != 0 &&i!=1)
- {
- y = (float)i;
- sum = 1.0/ y;
- s += k*sum;
- k = -k;
- printf("%d %f %f %f\n",i, y, sum, s);
- }
- }
- printf("%f\n", s);
- //system("pause");
- return 0;
- }
复制代码
也加上一段打印精度,结果如图:
你看,这不是一样的吗?
我猜你之前觉得精度不一样,是不是在输入的时候,填写了50,但是因为网上那个答案,填写进去的数字是n,还需要2*n-1,导致最终的计算精度远远大于你代码当中的50,所以导致了你的精度比它差很多。
|
|