如何快速比较双精度浮点数的符号?
我知道双精度浮点数有一个“符号位”,但我不确定在其二进制表示中“查找它”的方式是否可行。
除了“可移植性”问题,有人能告诉我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位开始,即使我只移动了一位?
其次,在MSVC++上检查double
的符号是否可以检查它的第64位吗?
if( (x < 0 && y < 0) || (x > 0 && y > 0) ) puts( "same" ) ; else puts ("different") ;
。 - bobobobo