我正在尋找將在Visual Studio中使用64位雙精度值並將其轉換爲80-bit extended (IEEE-754) double的代碼。結果應該存儲在一個10字節的數組中(我想象的是小尾數格式)。原因是我需要將80位double發送到用Borland C++編寫的程序,並要求這個雙倍。但我不知道該怎麼做,因爲我試過了(基本上分別取尾數和指數分別爲52和11位,將指數轉換爲16383偏移15位,並將尾數填充爲64位) t似乎工作。這是this question的倒數。在Visual Studio中將字節數組中的64位雙精度型轉換爲80位雙精度型
inline void ConvertDblToLongDbl(double dbl, unsigned char aCh[10])
{
__int64 ull= *(__int64*)(&dbl);
*(unsigned short*)&aCh[8]= (unsigned short)((ull>>52&0x7FF+15360)| // exponent, from 11 bits to 15 bits
((ull&(__int64)1<<63)?0x8000:0)); // sign, the 16th bit
ull= ull&0xFFFFFFFFFFFFF;
*(__int64*)&aCh[0]= ull|0x8000000000000000;
}
感謝,
中號
64位FP和80位FP之間的一個細微區別是,80位FP不會忽略標準化數字的前導1。這可能是打破目前的嘗試。 – Mysticial 2012-04-26 05:21:36
我其實試圖彌補,但不知道如何。我只是將最高尾數位設置爲1?請參閱我嘗試過的功能的編輯。 – Matt 2012-04-26 05:35:12
是的。如果64位'double'不是一個反常規,則在尾數的前面加上1。 – Mysticial 2012-04-26 05:36:41