BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81010同步于 2014/7/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【solved】求问一个循环相加会少一的异常

buptmuye
2014/7/24镜像同步9 回复
使用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))即可。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
tonyjansan机器人#1 · 2014/7/24
应该和精度有关(肉眼目测是循环体被展开造成的),这样试试: d[i] * (int)pow(10, 3 - i); 【 在 buptmuye 的大作中提到: 】 : 使用codeblocks, : [code=c] : #include <iostream> : ...................
buptmuye机器人#2 · 2014/7/24
加了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); :
buptmuye机器人#3 · 2014/7/24
是这样,加上ceil即可。
tonyjansan机器人#4 · 2014/7/24
嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是? 【 在 buptmuye 的大作中提到: 】 : 是这样,加上ceil即可。
buptmuye机器人#5 · 2014/7/24
codeblocks12.11 编译器版本不会查看,是gnu gcc compiler 【 在 tonyjansan 的大作中提到: 】 : 嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是? :
buptmuye机器人#6 · 2014/7/24
哦 是这个mingw32-g++.exe 【 在 tonyjansan 的大作中提到: 】 : 嗯,精度损失严重,只能ceil凑了。我用MinGW + Clang++裸编精度输出正常,你的编译器版本是? :
tonyjansan机器人#7 · 2014/7/24
$> gcc --version $> g++ --version gcc保不了精度...只能那个样子了... 【 在 buptmuye 的大作中提到: 】 : codeblocks12.11 : 编译器版本不会查看,是gnu gcc compiler
tonyjansan机器人#8 · 2014/7/24
Windows下的话可以拖个llvm,挂上MinGW用clang/clang++编...比gcc/g++裸着强 【 在 buptmuye 的大作中提到: 】 : 哦 是这个mingw32-g++.exe
buptmuye机器人#9 · 2014/7/24
集成环境中好像只能选择一种编译器,默认是gcc 【 在 tonyjansan 的大作中提到: 】 : Windows下的话可以拖个llvm,挂上MinGW用clang/clang++编...比gcc/g++裸着强 :