1

浮動小数点の実装に関する IEEE 標準を読み込もうとしましたが、それは私にとってかなり進んでおり、生計を立てるためのプログラミングはしていません。

これは私が疑問に思ったことです。

0 から N までの float 変数があり、必要に応じてスケールアップするとしますが、中間計算はこの正規化されていない値で行われます。

論理的には、範囲[0.0, 1.0]は十分です。しかし、数値を 0 から 1 の間で制限すると、なんらかの方法で精度が失われるのでしょうか? [0, 10.0]、またはを使用すると、何か得られ[0, 1000000.0]ますか?

ありがとうございました。

4

1 に答える 1

2

あなたのアイデアは良いものですが、ある意味では、浮動小数点数はこれを行うように設計されているため、何も保存しません。

内部的には、float には仮数と指数と呼ばれる 2 つの部分があります。仮数は範囲に相当し、指数は「実際の」値にするために必要なスケーリングです。

あなたが与える任意の数値は、[1-9.999...] のような範囲に正規化され、さらに 10 の乗数が乗じられます。したがって、ほとんどすべての値の仮数の精度が得られます (唯一の例外は、指数の極値に到達した場合です。これらは「非正規化数」(または「非正規化」) と呼ばれますが、非常に小さい (ゼロに近い)または大きく、通常は心配する必要はありません)。

したがって、1.23、12.3、または 123 のいずれを入力しても、1.23 (仮数) と係数 (1、10、または 100、指数) が内部的に格納されます。

実際には、10 の累乗 (10 進数) ではなく 2 の累乗 (2 進数) を使用するため (sixlettervariable のコメントを参照)、これはまったく正しくありませんが、一般的な考え方は同じです。

于 2012-06-06T02:02:17.727 に答える