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);

}
}
展开
 我来答
赢皮大8
2016-10-27 · TA获得超过889个赞
知道小有建树答主
回答量:991
采纳率:75%
帮助的人:516万
展开全部

算法没错,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 );
*/
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式