通用 C 執行時間連結庫 (UCRT) 提供許多整數和浮點數學連結庫函式,包括 ISO C99 所需的所有函式。 實作這些浮點函式可以平衡效能與正確性。 因為產生正確的四捨五入結果可能極為昂貴,所以這些函式會設計成有效率產生最接近正確四捨五入結果的近似值。 在大部分情況下,產生的結果會位於正確四捨五入結果的 +/-1 ULP(最小精確度單位)內,但在某些情況下可能會有較大的不精確性。
針對 ISO C Standard 11 (C11) 和更新版本,標頭 <tgmath.h> 除了包含 <math.h> 和 <complex.h>之外,還提供根據參數類型叫用對應數學函式的巨集。 如需詳細資料,請參閱型別泛型數學。
許多浮點數學連結庫函式針對不同的CPU架構有不同的實作。 例如,32 位元 x86 CRT 的實作可能和 64 位元 x64 CRT 的實作不同。 此外,某些函式對指定的 CPU 架構可能有多種實作。 在執行階段,會根據 CPU 支援的指令集動態選取最有效率的實作。 例如,在 32 位元 x86 CRT,有些函式同時有 x87 實作和 SSE2 實作。 在支援 SSE2 的 CPU 上執行時,會使用較快的 SSE2 實作。 在不支援 SSE2 的 CPU 上執行時,會使用較慢的 x87 實作。 因為數學程式庫函式的不同實作可能會使用不同的 CPU 指令和不同的演算法來產生結果,所以函式在不同的 CPU 中可能會產生不同的結果。 在大部分情況下,結果位於正確四捨五入結果的 +/-1 ULP 內,但實際結果可能會因 CPU 而異。
較新版本的 UCRT 可能會改善浮點數學連結庫函式的精確度和精確度。 由於 UCRT 是 Windows作系統的一部分,因此您可能會在不同的作系統版本或偵錯和發行組建之間取得這些函式的不同結果。 雖然不建議這麼做,但如果您需要這些函式,您可以在任何地方產生相同的結果,以靜態方式連結至 UCRT,以確保一致的結果。
舊的 16 位元版 Microsoft C/C++ 和 Microsoft Visual C++ 支援 long double 類型作為 80 位元精確度浮點資料類型。 在更新版本的 Visual C++ 中,long double 資料類型是與 double 類型相同的 64 位元精確度浮點資料類型。 編譯器會將 long double 和 double 視為不同的類型,但 long double 函式與其 double 對應項目相同。 CRT 提供 long double 版本的數學函式以相容於 ISO C99 原始程式碼,但請注意,二進位表示法可能與其他編譯器不同。