2010-08-06 34 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;