谁知道常数1和1.0在运算中有什么区别?

ariesjzj
博客专家认证
2006-02-08 04:18:53
有如下程序:
#include <cstdio>

int main()
{
double x = 0;
for (x = 0; x <= 0.001; x += 0.001)
{
double sum = 0.0;
for (int k = 1; k <= 11000; k++)
{
sum += 1 / (k * (k + 1) * (k + 2) * (k + x));
}
double rslt = (2 - x) * 1 + (x - 1) * 0.75 + (x - 2) * (x - 1) * sum;
printf("%5.3f %16.12f\n", x, rslt);

}
return 0;
}
程序结果为:
0.000 1.644933375498
0.001 1.643732400919

但把其中的常数后都加个.0,比如1变成1.0,2变成2.0,即如下(其它部分不改):
#include <cstdio>

int main()
{
double x = 0;
for (x = 0.0; x <= 0.001; x += 0.001)
{
double sum = 0.0;
for (int k = 1; k <= 11000; k++)
{
sum += 1.0 / (k * (k + 1.0) * (k + 2.0) * (k + x));
}
double rslt = (2.0 - x) * 1.0 + (x - 1.0) * 0.75 + (x - 2.0) * (x - 1.0) * sum;
printf("%5.3f %16.12f\n", x, rslt);

}
return 0;
}

结果变为:
0.000 1.644934066848
0.001 1.643733091232


也就是说1和1.0是不一样的
请问有什么差别?哪个比较精确?谢谢
...全文
242 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
逸学堂 2006-02-08
1是整形
1.0是浮点型
  • 打赏
  • 举报
回复
caijize 2006-02-08
就是整形跟浮点形的区别,
仔细看看整形数和浮点数在内存中的存储方法
和他们能表示的范围,你就会明白了。
  • 打赏
  • 举报
回复
caucyniu 2006-02-08
你编译时没有警告?
k + 1.0 和 K+1 一个按照浮点算 一个按照整形算
你没有强行转换编译器按照自己的转换规则算
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2006-02-08 04:18
社区公告
暂无公告