首頁  >  文章  >  後端開發  >  為什麼次正規數是精確度和表示長度之間的權衡?

為什麼次正規數是精確度和表示長度之間的權衡?

Susan Sarandon
Susan Sarandon原創
2024-11-08 12:34:01151瀏覽

Why are Subnormal Numbers a Tradeoff Between Precision and Representation Length?

IEEE 754 基礎

IEEE 754 浮點標準將數位組織為以下格式:

    IEEE 754 浮點標準將數位組織為以下格式:
  • 8位:指數
23 位:分數

次正規數

工程師實現了次正規數字來解決問題。除 0.0 之外的所有數字在二進位表示中均以 1 開頭。為了避免在該前導位上浪費精度,他們創建了「前導位約定」。

    但是,這將使最小的非零數字比以前的標準更大。工程師引入了次正規數作為例外,其中:
  • 指數為0
  • 前導位設定為0
指數固定為-126

這允許表示小於最小非次正規值的數字。

次正規數權衡

次正規數表示以下之間的權衡精確度和表示長度。較小的數字會降低精度,但表示數值的數量會增加一倍。

可視化

在幾何上,次正規擴展了指數 0 的範圍,使數字的可用空間加倍並減少該範圍內的間距。

實現次正規

#include <assert.h>
#include <inttypes.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

typedef struct {...} Float32; // Represents the 32-bit floating point

float float_from_bytes(..., uint32_t fraction); // Reconstructs float from individual parts
bool float32_equal(float f, uint32_t sign, uint32_t exponent, uint32_t fraction); // Compares float to individual parts

int main() {
    assert(float32_equal(0.5f, 0, 126, 0));
    assert(isnormal(0.5f));
    ... // More assertions

    return EXIT_SUCCESS;
}
C float 在大多數桌上型電腦上表示 32 位元 IEEE 754 數字。一個範例C 程式示範了次正規數的屬性:

實作中的次正規數

次正規數在某些平台上的實作效率可能較低。 ARMv8 提供「Flush-to-Zero」模式,其中次正常值舍入為零以實現效能最佳化。

非正常與次正常

次正常和非正常是同義詞,請參閱為相同類型的數字。

其他特殊情況
  • 無窮大:表示太大而無法用正常數字表示的數字。
NaN(不是數字):表示計算未產生有效結果,通常是由於輸入無效。

以上是為什麼次正規數是精確度和表示長度之間的權衡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn