我想反轉長雙的指數。反轉長雙的指數給我一個瘋狂的結果
假設x = 3.5e1356。我想x是3.5e-1356。
我有這樣的代碼:
long double x = 3.5e1356L;
int exponent;
long double fraction = frexpl(x, &exponent);
// recreate number with an inverted exponent
long double newNumber = ldexpl(fraction, -exponent);
此代碼後newNumber
是1.14732677619641872902e-1357
有無關原來的號碼。
我錯過了什麼?
指數是二進制,而不是小數。 – user2357112
嘗試查看LDBL_MAX和LDBL_MIN的(實現定義的)值(long double可分別表示最大和最小正值)。即使「LDBL_MAX」的「典型」值不超過「1E308」,並且您的輸入值比這大得多 - 因此可能會溢出。一旦發生這種情況,行爲是不確定的。基本的事情要記住:浮點表示不能表示任何數量級的任意值。 – Peter
@peter:在英特爾硬件上,long double具有16位指數,這允許比1E308大得多的數字。 – rici