c语音达依尔的麦子问题,这个程序算出来的答案是错误的,求各位大神帮忙看一下。
#include<stdio.h>#include<math.h>intmain(){floata,b;for(a=1,b=0;a<=64;a=a+1){b=b+pow(...
#include <stdio.h>
#include <math.h>
int main()
{
float a,b;
for(a=1,b=0;a<=64;a=a+1)
{
b=b+pow(2,a-1);
printf("%f,%f\n",b);
}
}
第一个错了
#include <stdio.h>
#include <math.h>
int main()
{
float a,b;
for(a=1,b=0;a<=64;a=a+1)
{
b=b+pow(2,a-1);
printf("%f\n",b);
}
} 展开
#include <math.h>
int main()
{
float a,b;
for(a=1,b=0;a<=64;a=a+1)
{
b=b+pow(2,a-1);
printf("%f,%f\n",b);
}
}
第一个错了
#include <stdio.h>
#include <math.h>
int main()
{
float a,b;
for(a=1,b=0;a<=64;a=a+1)
{
b=b+pow(2,a-1);
printf("%f\n",b);
}
} 展开
1个回答
展开全部
算法没错,float精度丢失造成的输出结果错误,
另外不建议在让计算机去进行2^63这种运算,可以将算法改为
for (a=1, i = 1; i <= 64; i++) {
a += a;
printf("%lf\n", a - 1);
}
追问
答案还是错的
追答
答案错了是因为数据类型以及输出方式的原因
unsigned _int64 a = 1;
for (int i = 1; i <= 64; i++) {
a += a;
printf("%llu\n", (a-1));
}
/*
//或者直接
unsigned _int64 a = 0xFFFFFFFFFFFFFFFF;
printf("%llu\n", a );
*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询