一个奇怪的问题……
noip吧
全部回复
仅看楼主
level 12
wtof1996
楼主
我发现g++ 很奇怪(4.4.1还有4.6.2都是如此)
double a=0,b=-1;
然后输出a/b居然输出-0!
明明应该是0啊
但是整型就没有这样的问题
gcc也是很正常
另外,vc2010也是输出-0。
难道以后用cpp输出浮点数前要加一个很蛋疼的if么……
2012年07月06日 03点07分
1
level 12
wtof1996
楼主
vc6倒是一切正常……一代不如一代了么
2012年07月06日 03点07分
2
level 12
wtof1996
楼主
如果比赛,输出-0,评测估计就不过……
2012年07月06日 03点07分
3
level 12
migicyang
我用g++和gcc测都发现有这个问题。printf : -0.000000 cout : -0 这是我对比测试的结果。
2012年07月06日 05点07分
5
level 12
wtof1996
楼主
抱歉,手误
gcc是很不正常
另外,老的3.x编译器没有这种问题
2012年07月06日 05点07分
6
level 8
贴吧用户_008PJ9J
pascal我记得也有这个问题?
所以要取abs吧
2012年07月06日 05点07分
7
wtof1996
有的题目有负数的情况,但是也有0,所以……
2012年07月06日 05点07分
贴吧用户_008PJ9J
@wtof1996
-0貌似可判断他=0的……
2012年07月06日 05点07分
level 13
jokxurwq
c4droid gcc 一切正常
2012年07月06日 05点07分
8
wtof1996
gcc版本?
2012年07月06日 05点07分
level 5
の魂之挽歌
经证实pascal确实也有这个问题
2012年07月06日 06点07分
9
level 12
wyl8899
手写dblcmp之类
2012年07月06日 06点07分
10
wwwaaannngggrs
碉堡了cmp
2012年07月06日 10点07分
wyl8899
@wwwaaannngggrs
神吐槽
2012年07月06日 12点07分
level 13
轩轩醉了
c4droid gnu gcc g++均无此问题,版本号看不到
2012年07月06日 06点07分
11
level 6
zx120120a
vs2008 用 printf 和 cout 都是 -0...
gcc 4.6.1 用 printf 是 0
g++ 4.6.1 用 cout 是 -0
0 和 -0 在二进制下的表示是不一样的
-0 : 0x8000000000000000
0 :0x0000000000000000
2012年07月06日 09点07分
12
zx120120a
把 double 强制转换 unsigned long long int 看的话哦的却是这样的哦[$1] double a=0,b=-1; double t = a/b; unsigned long long int *z = (unsigned long long int*) cout << t << endl << *z;
2012年07月06日 13点07分
level 12
wtof1996
楼主
唉,咋都这么蛋疼……难道是为了加快计算有提前判断符号位然后0的情况没有考虑?!
2012年07月06日 09点07分
13
level 11
肥肥
因为是浮点很正常啊..加个eps呗
2012年07月06日 09点07分
14
level 12
migicyang
谁英语好?这貌似应该反馈给gcc的开发者吧
2012年07月06日 14点07分
15
level 12
饮水机主力💦
VC2005,如图
2012年07月08日 04点07分
16
level 11
_喔嘞嘞
很正常
2012年07月08日 05点07分
17
level 13
凌云七风
浮点误差,正常无比
2012年07月08日 05点07分
18
1