unumはどのようにしてIEEEの負のゼロをエミュレートできますか?


9

私は現在、John Gustafson(Youtube)による「The End of Error-Unum Computing」を読んでいます。私がまだ確信がないのは、負の符号の付いたゼロによってIEEEで処理されたケースがunumでどのように処理されるかです。

したがって、最初に、unumは特定の正確な値(浮動小数点と同様)を表すことを許可し、さらに正確な値(正確な-∞と∞を含む)の間にある開いた間隔を表すことを許可します。したがって、完全な実数線は、正確な値と開いた間隔を交互に繰り返すことによって表されます。

-∞、(-∞、-maxreal)、-maxreal、... -smallsubnormal、(-smallsubnormal、0)、

0、

(0、smallsubnormal)、smallsubnormal、... maxreal、(maxreal、∞)、∞

このように、(IEEEの伝統では)アンダーフローやオーバーフローなどの例外的な値は、ほんの一部のオープンインターバルです。言い換えれば、これらの以前は特別な条件だったものが、今では通常のケースに変わります。

IEEEの-∞は、{-∞}と(-∞、-maxreal)の和集合に対応します。

そして、符号付きゼロは、間隔(-smallsubnormal、0)と(0、smallsubnormal)になる可能性があります。

ただし、1 /(-smallsubnormal、0)は(-∞、-maxreal)になり、-∞だけではなくなりました。一方、1/0は∞です。

これについて私がまだ躊躇しているのは、IEEE -0と+0で比較すると等しいことです。しかし、それらはunumにはありません。マッピングは100%ではないようです。だから、違いが現れるかもしれないコーナーケースがあるかどうか(そしてそれらのケースが本当に関連しているかどうか)?

(私は、なぜ負のゼロが重要なのかを知っていますか?負の浮動小数点値の使用


1
マッピングを1対1にする必要があると思うのはなぜですか?リンクした質問に記載されている理由はunumの問題ではないので、なぜマイナスゼロにするのですか?
Ordous、2015年

@Ordous:(Ch.18.1、p.257)「Unumはfloatのスーパーセットです。floatは単にubitがゼロであるunumです。」など。すべて(を含むguess)は、文字どおりに物事を多少なりとも(そして最初に)変換できることを示唆しています。文字どおりの翻訳ではunumを十分に活用していないことを十分に承知しています。

5
本を手元に置かずに引用に反対することはかなり難しいです。しかし、IEEEプレゼンテーションでの彼のスライドは、unumコンピューティングの利点として「アンダーフローの必要がない」と述べています。したがって、それは正確にアンダーフローなので、負のゼロは必要ありません。このシステムを拡張して負のゼロを含めることもできます、そうする理由はありません。IEEEの正直な負の0は数学と矛盾しています。
Ordous、2015年

@Ordous:アンダーフローは、オープン間隔(-smallsubnormal、0)とその正の対応によって処理されます。したがって、これらは-0と+0に最も近いものです。しかし、この間隔は本当にあたかも動作するのでしょうか?
false

8
アンダーフローはここでは「処理」されず、存在しません。負の0はIEEEの問題であり、この標準は他のものと一緒に修正しようとしています。-0と+0を等しくすることはできませんし、すべきではありませんが、IEEEではそれらの差が0であるため、それらは等しくなければなりません。このパラドックスには良い解決策がありません。unumsに違いがあるため、等しくすることはできません。システムの全体の要点はIEEEの問題を修正することですが、それは必然的にそれと矛盾することを意味します。これは、言われた矛盾の1つです。そして、彼の本に古い標準を使用するための組み込みシステムが提案されている理由。
Ordous

回答:


3

コメントが長すぎるので、これを答えとして書きます...

IEEEの問題は、区別する3つのケースがあることですが、これらの表現は2つしかありません。

  • 負の値、絶対値が小さすぎて表現できない–これはIEEE -0.0で表され、簡単にマッピングできます (-smallsubnormal,0)
  • IEEE 0.0で表される、完全にnullにマッピングされた値 0
  • 表すには小さすぎる正の値。これもIEEE表現0.0 持っていますが、にマッピングする必要があります(0, +smallsubnormal)

ここでの問題は負のゼロではありませんが、IEEE 0.0が2番目または3番目のケースであるかどうかを区別することはできません。言い換えれば、IEEEにUNUMからマッピング機能はありません全単射-と、これまでと同様に、ではありません任意のそれが正確か、インターバル1であれば、他のIEEE値、あまりにも、私たちが知っていることはありません!

ですから(-smallsubnormal,0)、-0.0をにマップするのはまったく問題ないと思います。IEEE0.0をにマップするの0か、それよりも良いのかを判断する必要があります(0, +smallsubnormal)。私は個人的に最初のものに傾向がありますが、それはそれほど権威的ではありません...

IEEEとの比較(-0.0は0.0と等しい):とにかく(ほとんど)絶対に等しいかどうかは決して比較しないでください(CまたはC ++:==演算子)。ただし、差の絶対値が適切なしきい値よりも小さい場合のみ。この問題は、UNUMSを使用しても部分的にしか解消されません。uビットが設定されていなくても、完全に等しいかどうかを比較できるようになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.