比较double
号的最快方式是什么?比较两个双打号
我知道double
有一个“符号位”,但我不确定在二进制代表中“寻找它”的方式是否是个好主意。
除了“可移植性”的问题,有人能告诉我这个代码在MSVC++中发生了什么?
#include <stdio.h>
int main()
{
double z = 5.0 ;
__int64 bitSign ;
__int64 *ptr ;
ptr = (__int64*)&z ;
for(__int64 sh = 0 ; sh < 65 ; sh++)
{
bitSign = 1L << sh ; // Weird. it doesn't do 1.
printf("Bit# %d (%llx): %lld\n",
sh, bitSign, ((*ptr) & bitSign)) ;
}
}
首先,为什么从第32位开始,即使我只移位了一位?
其次,我可以检查double
的第64位以检查它在MSVC++上的符号吗?
哦,请不要回答'if((x <0 && y < 0) || (x > 0 && y> 0))puts(“same”); else puts(“different”);' – bobobobo 2010-05-06 15:17:47
你有没有想过检查x和y乘积的符号? (x * y <0)? “不同”:“相同” – falconcreek 2010-05-06 15:27:12
@falconcreek乘法运算出大数值溢出的风险 – corsiKa 2010-05-06 15:47:48