数値を倍精度浮動小数点形式から単精度浮動小数点形式に変換すると、精度が失われます。この変換を達成するために使用されるアルゴリズムは何ですか?
数値は、それぞれの制限に単純に削減されるよりも大きい3.4028234e+38
か小さいか? -3.4028234e+38
変換プロセスはこれよりも少し複雑だと思いますが、ドキュメントが見つかりませんでした。
数値を倍精度浮動小数点形式から単精度浮動小数点形式に変換すると、精度が失われます。この変換を達成するために使用されるアルゴリズムは何ですか?
数値は、それぞれの制限に単純に削減されるよりも大きい3.4028234e+38
か小さいか? -3.4028234e+38
変換プロセスはこれよりも少し複雑だと思いますが、ドキュメントが見つかりませんでした。
最も一般的な浮動小数点形式は、IEEE 754 標準で指定されているバイナリ浮動小数点形式です。これらの形式に関するご質問にお答えします。標準の新しい (2008) バージョンにも 10 進浮動小数点形式があり、IEEE 754 標準以外の形式もありますが、754 バイナリ形式が最も一般的です。丸めに関するいくつかの情報と標準へのリンクは、このウィキペディアのページにあります。
倍精度から単精度への変換は、演算結果の丸めと同じように扱われます。(たとえば、加算、乗算、または平方根には正確な数学的値があり、その値は規則に従って丸められ、演算から返される結果が生成されます。変換のために、入力値は正確な数学的値であり、丸くなっています。)
一般に、コンピューティング環境にはデフォルトの丸めモードがあります。(さまざまなプログラミング言語で、デフォルトの丸めモードを変更したり、特に各操作で指定したりする方法が提供されている場合があります。) デフォルトの丸めモードは、通常、最も近い値に丸められます。その他には、ゼロ方向への丸め、正の無限方向への丸め (上向き)、および負の無限方向への丸め (下向き) があります。
最も近い値に丸めるモードでは、正確な値に最も近い表現可能な数値が返されます。同数の場合は、(小数部または仮数部の) 下位ビットが偶数の数値が返されます。この目的のために、無限は有限数のパターンの次の値であるかのように効果的に機能します。単精度では、最大の有限数は 0x1.fffff8p127、0x1.fffffap127、0x1.ffffffcp127、および 0x1.ffffffep127 です。(単精度仮数には 24 ビットがあるため、そのビットのステップは、最後の 16 進数の 2 のステップです。) 丸めの目的で、無限大は 0x2p128 にあるかのように機能します。そのため、正確な結果が 0x1.fffffep127 に近い (つまり、0x1.ffffffp127 より小さい) 場合は、0x1.ffffffep127 に丸められます。0x1.ffffffp127 以上の場合は、無限大に丸められます。負の無限大の状況は対称です。
無限方向への丸めモードでは、正確な値以上の最も近い表現可能な値が返されます。したがって、0x1.fffffep127 を超える値は無限大に丸められます。負の無限大への丸めは、正確な値以下の最も近い表現可能な値を返します。Round-toward-zero は、ゼロに向かう方向で最も近い表現可能な値を返します。
IEEE 754 標準は結果のみを指定します。アルゴリズムは指定しません。丸めを実現するために使用される方法は、実装ごとに異なります。