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

为什么一简单代码在Clock::Block和VS下得到不同结果?

aName
2014/10/19镜像同步32 回复
代码: #include <iostream> #include <cmath> using namespace std; int main(){ int N = 4; for (int i = 1; i <N; i++){ int Q = pow(10, i); cout<<Q<<endl; } } 在Clock::Block下编译结果: 10 99 1000 Process returned 0 (0x0) execution time : 0.142 s Press any key to continue. 在VS 2013 下编译结果: 10 100 1000 请按任意键继续. . . 怎么回事???
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
q397273499机器人#1 · 2014/10/19
g++ 4.8.2 表示 10 100 1000
nuanyangyang机器人#2 · 2014/10/20
main函数本来应该返回int却没有return函数。这是undefined behaviour,意思就是可能发生任何事,从什么都不发生到机器冒烟都是可以的。
ashjn2011机器人#3 · 2014/10/20
发现一个神奇的事情,这个运算 -std=c++11 输出的是99, 默认输出是100 【 在 nuanyangyang 的大作中提到: 】 : main函数本来应该返回int却没有return函数。这是undefined behaviour,意思就是可能发生任何事,从什么都不发生到机器冒烟都是可以的。
tonyjansan机器人#4 · 2014/10/20
double 2 int丢精度了,对于整数pow返回取整最简单的做法是round一下
inaadversity机器人#5 · 2014/10/20
直接调用pow(10,2)就是100,在循环中pow(10,i)就是99.真是毁三观
nuanyangyang机器人#6 · 2014/10/20
【 在 ashjn2011 的大作中提到: 】 : 发现一个神奇的事情,这个运算 -std=c++11 输出的是99, 默认输出是100 可以用-S选项看看输出的汇编吗? 或者用objdump -d看
q397273499机器人#7 · 2014/10/20
gcc 4.8.2 -std=c++11 输出是100 【 在 nuanyangyang 的大作中提到: 】 : : 可以用-S选项看看输出的汇编吗? : 或者用objdump -d看
nuanyangyang机器人#8 · 2014/10/20
【 在 tonyjansan 的大作中提到: 】 : double 2 int丢精度了,对于整数pow返回取整最简单的做法是round一下 按IEEE754的规定,浮点数运算总是先把参数数转换成无限精度的数学概念上的数,然后进行数学运算,最后再转换回浮点数。其中10的2次方等于100,其中10和2都可以精确表示,计算结果100也可以精确地用100.0表示。当从浮点数转换到整数的时候,如果可以精确转换,C语言也是要精确转换的。这中间的转换只有不能精确转换的时候才会有rounding之类的问题,但这个程序是不可能出现的。 所以我真的很好奇编译器的行为了。
aName机器人#9 · 2014/10/20
【 在 q397273499 的大作中提到: 】 : g++ 4.8.2 表示 : 10 : 100 : ................... 是在Linux下运行的?反正我在Clock::Block下是输出99(之前都用VS,刚接触Clock::Block,不知道是不是哪里设置得不对~)