回答:
問題の2つのエンティティが同じ「ユニット」と同じ「幅」を持っている場合、2の補数は理にかなっています。幅とは、たとえば、NとMが異なるNビット数とMビット数を追加する場合、2の補数を使用しない方が良いということです。浮動小数点数の場合、単位の問題があります。指数が異なる場合、仮数の1つを精神的にシフトし、今までと同じ問題(幅)になります。
指数ビットについては、符号+大きさの代わりにバイアスを使用することで、もう1つの値を取得します(そうでない場合は+0と-0になります)。ここで、2の補数は、数値を乗算または除算するときに意味を持ちます(指数を加算または減算するため)が、加算または減算するときはあまり意味がありません。
編集:注釈者は、符号拡張を使用して、異なる長さの2の補数整数を追加できると述べました。オーバーフローの検出にはいくつかの問題もありますが、それも修正可能です。要約すると、十分に注意すれば、おそらく2の補数を使用できます。(乗算と除算も処理する必要があります。)
しかし、なぜ浮動小数点数に符号ビットが必要なのですか
誤った仮定。必要ありません。仮数に2の補数を使用する浮動小数点形式に出会ったことは確かですが、名前については掘り下げなければなりません。
私は数値解析の専門家には程遠いですが、ゼロに署名することは彼らにとって重要だと思います。おそらく、1の補数よりも操作が簡単です。それはおそらくIEEE-754の選択における基準でした。
また、なぜ指数ビットは符号付き大きさの表現の代わりにバイアスを使用するのですか
繰り返しますが、それは必要のないものであり、いくつかは異なる方法で行いました。
これは、指数で行われる一連の操作に対してハードウェア実装を行う方が簡単な表現です(ここでは-0の表現は必要ありません)。
その選択の結果の1つは、NaNを気にしない場合は符号付き整数比較を使用してFP数を比較できることです。これはおそらくいくつかの基準でした(NaNが特別な処理を必要とするという事実は、 IEEE-754の場合)。
IEEE 754は、2の補数または1の補数ではなく、符号/大きさを使用します。
2の補数には、正と負の範囲が同一ではないという欠点があります。すべてのビットパターンが有効な場合、-xを簡単に計算できない数値xがあります。それは良くないね。別の方法は、無効なビットパターンが存在することです。これも悪いことです。IEEE 754には、64ビットまたは32ビットの浮動小数点の無効なビットパターンがないため、そのことを心配する必要はありません。
補数は、乗算/除算をより複雑にします(符号付きの大きさでは、符号をxorし、仮数を符号なしの数として扱います)。足し算と引き算については、自分の補数で足し算と引き算を考えたくありません。頭を痛めます。
符号付きゼロがあると、数値計算に役立つ可能性のある表現力が向上します。ウィキペディアのページ「Signed zero」には次のように記載されています。
IEEE 754に符号付きゼロを含めることで、特に複雑な初等関数で計算するときに、いくつかの重大な問題で数値精度を達成するのがより簡単になると主張されます。
IEEE 754浮動小数点の主な設計者の1人であるWH Kahanは、これらの理由から符号付きゼロの支持者です。彼の意見はおそらく大きな重みを持っているでしょう。
浮動小数点計算は正確な値ではなくおおよその値を生成することを理解することが重要だと思います。つまり、浮動小数点計算でエンコードされた値Xが得られる場合、これは理論的に理想的な値を表し、ほぼ確実にXではなく、範囲[X .. X + e){ここで 'e'は 'つまり、XとX + e}の間に浮動小数点数はありません。より具体的には、浮動小数点ゼロは、おそらく正確にはゼロではないが、非ゼロの浮動小数点エンコード値で表すには小さすぎる理想的な数値を表します。
それを考えると、符号と大きさの表現を使用すると、符号化でゼロまたは理想的な値が正または負のどちら側にあるかを正確に「記憶」することができます。これは、特定の複雑な(「a + bi」の意味で)計算で重要です-複雑な->複雑な関数は多くの場合「多値」であるため、適切な計算のためには「分岐カット」の位置に注意を払うことが重要です。符号付きゼロは、これらの分岐カットの位置を意味的にマークします-プラス側で行われる計算は、マイナス側の計算とは異なります。
ほとんどの浮動小数点形式は、バイナリシステムでは、非最小指数の非ゼロ値は仮数の最上位ビットとして「1」を持つという事実を利用しています。したがって、仮数に23ビットフィールドがあるシステムでは、正数の仮数は0から8,388,607の範囲ではなく、8,388,608から16,777,215の範囲です。正の数である場合とそうでない場合がある数値の仮数は、-16,777,215から-8,388,608および+8,388,608から+16,777,215です。2の補数はゼロを「スムーズに」計算する必要がある場合に最適な数値形式ですが、仮数の値の不連続な範囲は、2の補数を使用するかどうかに関係なく、計算がゼロを超えてスムーズに動作できないことを意味します。