C 程式設計/math.h/ldexp
外觀
在計算中,ldexp 是一個函式,它將一個雙精度浮點數乘以一個指定的 2 的整數次冪,如果結果是執行環境中用於雙精度浮點數表示的有效浮點數,則返回結果。
它是 C 程式語言的數學庫例程之一,在標頭檔案 math.h 中宣告。
ldexp 函式在 C 程式語言標準 ISO/IEC 9899 [1] 中定義如下
7.12.6.6 ldexp 函式
概要
#include <math.h>
double ldexp(double x, int exp);
double ldexpf(float x, int exp);
long double ldexpl(long double x, int exp);描述
ldexp 函式將浮點數乘以 2 的整數次冪。可能會發生範圍錯誤。返回值
ldexp函式返回x*2exp
Open Group Single Unix Specification 在 Unixtm 主機環境中擴充套件了 ldexp 的介面定義。[2]
- “描述”部分包含以下附加資訊
- 希望檢查錯誤情況的應用程式應將 errno 設定為零,並在呼叫這些函式之前呼叫 feclearexcept(FE_ALL_EXCEPT)。在返回時,如果 errno 不為零,或者 fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) 不為零,則發生了錯誤。
- “返回值”部分擴充套件了以下條款
- 如果這些函式會導致溢位,則必須發生範圍錯誤,並且
ldexp()、ldexpf()和ldexpl()必須分別返回 ±HUGE_VAL、±HUGE_VALF和 ±HUGE_VALL(根據x的符號)。 - 如果正確的值會導致下溢,並且無法表示,則可能會發生範圍錯誤,並且必須返回 0.0(如果支援),或者返回實現定義的值。
- 如果 x 為 NaN,則必須返回 NaN。
- 如果 x 為 ±0 或 ±Inf,則必須返回
x。 - 如果 exp 為 0,則必須返回 x。
- 如果正確的值會導致下溢,並且可以表示,則可能會發生範圍錯誤,並且必須返回正確的值。
- 如果這些函式會導致溢位,則必須發生範圍錯誤,並且
- 它還添加了一個“錯誤部分”,如下所示
- 如果以下情況發生,這些函式必須失敗
- 範圍錯誤
- 結果溢位。
- 如果整數表示式 (math_errhandling & MATH_ERRNO) 不為零,則 errno 必須設定為 [ERANGE]。如果整數表示式 (math_errhandling & MATH_ERREXCEPT) 不為零,則必須引發溢位浮點異常。
- 結果溢位。
- 範圍錯誤
- 如果以下情況發生,這些函式必須失敗
對於基於二進位制指數的浮點表示(如 IEEE 754),ldexp 可以透過簡單地從 x 的值中提取指數並將 exp 新增到它來實現,如果結果在表示的有效指數值內,則用結果替換 x 的指數。如果計算出的指數值過高,則函式返回 +∞ 或 -∞(取決於 x 的符號),如果值過低,則函式返回 0.0。