一个奇怪的问题……
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
我用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
pascal我记得也有这个问题?
所以要取abs吧
2012年07月06日 05点07分 7
有的题目有负数的情况,但是也有0,所以……
2012年07月06日 05点07分
@wtof1996 -0貌似可判断他=0的……
2012年07月06日 05点07分
level 13
c4droid gcc 一切正常
2012年07月06日 05点07分 8
gcc版本?
2012年07月06日 05点07分
level 5
经证实pascal确实也有这个问题
2012年07月06日 06点07分 9
level 12
手写dblcmp之类
2012年07月06日 06点07分 10
碉堡了cmp
2012年07月06日 10点07分
@wwwaaannngggrs 神吐槽
2012年07月06日 12点07分
level 13
c4droid gnu gcc g++均无此问题,版本号看不到
2012年07月06日 06点07分 11
level 6
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
把 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
谁英语好?这貌似应该反馈给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