2017-09-27 8 views
2

浮動小数点数が不正確であることは知っています。しかし、私の質問は、 "次の"数字が結果に丸められることです。「真の」結果が十分に正確に表現できない場合、倍精度/浮動小数点はどのように丸められますか?

次に高いのですか?次の低い方?それは最も近いものでしょうか?

私の推測では、仮名に何が起こるのかという疑問ですが、結果が "下から"(例:合計)で作成されているかどうかに関係なく、 "from above"(例えば、相違点)。

それはもっと簡単で、それは純粋に恣意的で、コンパイラ/アーキテクチャのみに依存しますか?

答えて

2

それはあなたのコンパイルのプラットフォームは、基本的な操作についてはIEEE 754

を使用していることは非常に可能性があり、+、 - 、*、/、丸めは任意ではありません。 IEEE 754は、いくつかを定義していますrounding modes。明示的に設定しなかった場合のデフォルトモードは、結果を最も近い表現可能な値(「最も近いものに丸め、偶数につなげる」)に丸めることです。 IEEE 754の詳細については、その結果が2つの表現可能な表現可能な値に等しく近いときに何をすべきかをルールが記述しているかどうかが重要です。

より複雑な関数、たとえばサイン関数の場合は、実装によって異なります。最小精度の実装では、実際の結果に最も近い2つの表現可能な値のいずれも存在しない結果が生成されることさえあります。

デビッドGolbergのarticle「すべてのコンピュータ科学者は、浮動小数点演算について知っておくべきことは、」多くの場合、浮動小数点が立ち上がる。このサイトいつでも上行き当たりばったりお勧めしますが、あなたはそれを読むのが好きかもしれないように、この場合には、それが聞こえるされます。

1

これは実装に依存しますが、IEEE 754標準に準拠するほとんどの実装では、いくつかの丸めオプションの1つを選択する手段があります。

デフォルトモードは、最も近い表現可能な数値に丸め、同数の場合は、偶数に丸めます(最下位ビットがゼロの丸め)。

詳細はhttps://en.m.wikipedia.org/wiki/IEEE_754を参照してください。