返回信息流使用codeblocks,dev-cpp测试发现:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int d[4]= {1,2,3,4};
int tmp =0;
for(int i=3; i>=0; i--)
{
tmp = tmp + d[i]*pow(10,3-i);
cout << d[i]*pow(10,3-i) << " " << tmp << endl;
}
return 0;
}
输出却是:
4 4
30 34
200 233
1000 1233
Process returned 0 (0x0) execution time : 0.150 s
Press any key to continue.
为什么计算会少加1呢?
应该是和精度有关,加上ceil(pow(10,3-i))即可。
这是一条镜像帖。来源:北邮人论坛 / cpp / #81010同步于 2014/7/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【solved】求问一个循环相加会少一的异常
buptmuye
2014/7/24镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
应该和精度有关(肉眼目测是循环体被展开造成的),这样试试:
d[i] * (int)pow(10, 3 - i);
【 在 buptmuye 的大作中提到: 】
: 使用codeblocks,
: [code=c]
: #include <iostream>
: ...................
加了int之后就变成:
4 4
30 34
200 232
1000 1232
Process returned 0 (0x0) execution time : 0.167 s
Press any key to continue.
应该是和精度有关
【 在 tonyjansan 的大作中提到: 】
: 应该和精度有关(肉眼目测是循环体被展开造成的),这样试试:
: d[i] * (int)pow(10, 3 - i);
:
嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是?
【 在 buptmuye 的大作中提到: 】
: 是这样,加上ceil即可。
codeblocks12.11
编译器版本不会查看,是gnu gcc compiler
【 在 tonyjansan 的大作中提到: 】
: 嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是?
:
哦 是这个mingw32-g++.exe
【 在 tonyjansan 的大作中提到: 】
: 嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是?
:
$> gcc --version
$> g++ --version
gcc保不了精度...只能那个样子了...
【 在 buptmuye 的大作中提到: 】
: codeblocks12.11
: 编译器版本不会查看,是gnu gcc compiler
Windows下的话可以拖个llvm,挂上MinGW用clang/clang++编...比gcc/g++裸着强
【 在 buptmuye 的大作中提到: 】
: 哦 是这个mingw32-g++.exe
集成环境中好像只能选择一种编译器,默认是gcc
【 在 tonyjansan 的大作中提到: 】
: Windows下的话可以拖个llvm,挂上MinGW用clang/clang++编...比gcc/g++裸着强
: