2010-08-06 45 views

回答

1

我在Java中并没有真正使用这种方法,但是简单地将long long值设置为double类型的变量有什么问题?

无论平台多长,long long都是64位。

如果需要,您可以在math.h中使用isnan()检查double中的NaN。

1

您可以使用memcpy将位表示复制到类型为double的变量的地址中。我不确定这是否进入未定义行为的领域。

//assert(sizeof(double) == sizeof(unsigned long long)); 

unsigned long long bitPattern = 0x7ff0000000000000ULL; 
double doubleValue; 

memcpy(&doubleValue, &bitPattern, sizeof doubleValue); 

//assert(isinf(doubleValue)); 

为正无穷大的位模式被从显示以记录longBitsToDouble方法this page借来的。

1
uint64_t bitPattern = whatever;// use this rather than long long because it is explicitly 64 bits 
double doubleValue; 
doubleValue = *(double*)&bitPattern;