16

そのため、浮動小数点数のIEEE754標準で定義されている非正規化数について詳しく調べようとしています。Googleの検索結果のおかげで、すでにいくつかの記事を読んだり、StackOverFlowの投稿をいくつか読んだりしました。しかし、私はまだ答えられていないいくつかの質問があります。

まず、非正規化フロートとは何かについての私の理解を確認します。

精度のビットが少なく、正規化された数値よりも(大きさが)小さい数値

基本的に、非正規化された浮動小数点数は、任意の浮動小数点値で表すことができる最も小さい(大きさの)数値を表すことができます。

それは正しいですか?それ以上のものはありますか?

私はそれを読みました:

非正規化数を使用すると、多くのプラットフォームでパフォーマンスコストが発生します

これについて何かコメントはありますか?

私はまた、その記事の1つを読みました

「正規化数と非正規化数の重複を避ける」必要があります

これについて何かコメントはありますか?

IEEE標準の一部のプレゼンテーションでは、浮動小数点範囲が提示されると、非正規化数が除外され、テーブルは「有効範囲」としてラベル付けされます。これは、プレゼンターが「非正規化数は可能な限り最小の浮動小数点を表すことができることを知っている」とほぼ同じです。ポイント値ですが、非正規化数の特定の欠点があるため、一般的な使用シナリオにより適した範囲からそれらを除外することを選択します。」-非正規化数が一般的に使用されていないかのように。

非正規化数を使用することは、ほとんどの場合、良いことではないことが判明したという印象を受け続けていると思いますか?

私が自分でその質問に答えなければならないとしたら、私はそれを考えたいと思います:

非正規化数を使用すると、可能な限り最小の(大きさの)数値を表すことができるため、適切です。精度が重要でなく、正規化数と混同しない限り、アプリケーションのパフォーマンスは要件の範囲内に収まります。

ほとんどのアプリケーションはそれほど小さな表現を必要としないため、非正規化数を使用することは悪いことです-精度の低下は有害であり、非正規化数と混同することで足を簡単に撃つことができ、パフォーマンスはコストに見合わないほとんどの場合。

これらの2つの答えについて何かコメントはありますか?非正規化数について他に何が欠けているか、理解できない可能性がありますか?

4

1 に答える 1

17

基本的に、非正規化された浮動小数点数には、任意の浮動小数点値で表現できる最も小さい (絶対値で) 数値を表現する機能があります。

それは正しいです。

非正規化数を使用すると、多くのプラットフォームでパフォーマンス コストが発生します

ペナルティはプロセッサによって異なりますが、最大 2 桁になる可能性があります。理由?このアドバイスと同じ:

「正規化された数値と非正規化された数値の重複を避ける」必要があります

重要な点は次のとおりです。デノーマルは、IEEE-754 浮動小数点形式内の固定小数点「マイクロ形式」です。通常の数では、指数は 2 進小数点の位置を示します。非正規数には、double の指数が 2 -1074の固定小数点表記の最後の 52 ビットが含まれます。

したがって、デノーマルは特別な処理が必要なため遅くなります。実際には、それらが発生することはめったになく、チップ メーカーはまれなケースに多くの貴重なリソースを費やすことを好みません。

デノーマルとノーマルを混在させると時間がかかります。これは、フォーマットを混在させ、2 つの間で変換する追加の手順があるためです。

ほとんどの場合、非正規化された数値を使用することは良いことではないという印象を受け続けていると思いますか?

Denormals は、1 つの主要な目的のために作成されました:段階的なアンダーフローです。これは、小さな数値間の相対的な差を小さく保つ方法です。最小の通常の数値からゼロにまっすぐ進むと (急激なアンダーフロー)、相対的な変化は無限大になります。アンダーフローで非正規化すると、相対的な変化はまだ完全には正確ではありませんが、少なくともより合理的です。そして、その違いは計算に現れます。

別の言い方をすれば。浮動小数点数は均一に分散されません。連続する 2 の累乗の間には常に同じ量の数値が存在します: 2 52 (倍精度の場合)。したがって、デノーマルがない場合、常に 0 と最小の浮動小数点数の間にギャップが生じます。これは、最小の 2 つの数値の差のサイズの2 52倍です。Denormals は、このギャップを均一に埋めます。

急激なアンダーフローと緩やかなアンダーフローの影響の例として、数学的に等価なx == yと を見てくださいx - y == 0xとが小さいが異なっていて、急激なアンダーフローを使用する場合y、それらの差が最小カットオフ値よりも小さい場合、それらの差はゼロになるため、等価性に違反します。

段階的アンダーフローでは、2 つの小さいが異なる正規数の差が非正規化になり、これはまだゼロではありません。同等性が保たれます。

そのため、デノーマルは例外的な場合のバックアップ メカニズムとしてのみ設計されているため、意図的にデノーマルを使用することはお勧めしません

于 2013-02-28T17:51:17.067 に答える