Ich habe wahrscheinlich mehr Zeit mit dieser Frage verbracht, als ich sollte, aber hier sind meine Ergebnisse.
Ich kann kein Beispiel eines "reinen" parallelen Präfixaddierers für negabinäre Zahlen finden. Ich denke auch, dass es ein offenes Problem ist, da ich keinen Beweis dafür gesehen habe, dass es nicht möglich ist.
Ich kann Sie am ehesten durch eine zweistufige negative Negabinäraddition (in der Literatur häufig mit nnba abgekürzt) erreichen. Es basiert auf der folgenden Eigenschaft:
Sei und g ( x ) = x n - 1 ¯ x n - 2 . . . x 1 ¯ x 0 . Dies sind im Grunde eine XOR-Operation mit und jeweils. Das können Sie dann beweisenf( x ) = xn - 1¯¯¯¯¯¯¯¯¯¯xn - 2. . . x1¯¯¯¯¯x0G( x ) = xn - 1xn - 2¯¯¯¯¯¯¯¯¯¯. . . x1x0¯¯¯¯¯0xAA...AA
0x55...55
- ( a +n bb ) = g(f( a ) + f( b ) + 1 )
+n b+
Die negative Summe kann dann einfach mit derselben Eigenschaft, jedoch mit einem Nulloperanden, invertiert werden:
- x = g( f( x ) + f( 0 ) + 1 )
Um die Summe mit parallelen Präfixaddierern zu ermitteln, können Sie:
- f( A )f( b )
- Berechnen Sie die reguläre Binärsumme, während Sie das Übertragsbit für das LSB (das + 1), was zu einem ersten Zwischenbetrag führt s1.
- Invertiere alle Bits von s1 (das ist f( g( s1) )). Dies ist das Ende der ersten Summe und gleichzeitig der Beginn der Inversion.
- Erhöhe das Ergebnis um
0xAA...AB
(= f( 0 ) + 1) unter Verwendung eines parallelen Präfixaddierers, wobei sich die zweite Zwischensumme ergibt s2
- Berechnen G( s2) (Invertieren jedes geraden Bits), um die endgültige Negabinsumme zu finden.
Ich habe tatsächlich versucht, einen "reinen" Parallel-Präfix-Addierer zu finden, aber ich fand ihn zu komplex für die Zeit, die ich bereit war, dafür aufzuwenden. Hier ist der Grund:
Der springende Punkt bei parallelen Präfixaddierern ist, eine Operation von zu finden { 0 , 1 }n× { 0 , 1 }n→ { 0 , 1 }nAuf diese Weise können Sie die Überträge (in diesem Fall 2) aus diesen Bits leicht berechnen. Als zusätzliche Einschränkung muss die Operation assoziativ sein , um parallel berechnet zu werden. Dies schließt beispielsweise grundsätzlich jeden NOT-Operator aus (der nicht Teil einer doppelten Verneinung ist). Beispielsweise:a ∘ b = a ⋅ b¯ ist kein assoziativer Operator, weil
( a ∘ b ) ∘ ca ∘ ( b ∘ c )= a ⋅ b¯⋅ c¯= a ⋅ b ⋅ c¯¯¯¯¯¯¯¯¯¯
Beachten Sie, dass der Boolesche Operator für die Überträge in Ihrer Frage die gemischten Begriffe enthält c+ichc-ich¯¯¯¯¯ und c-ichc+ich¯¯¯¯¯, was es unmöglich macht, es so zu benutzen, wie es ist. Für einen einzelnen Übertrag in einer normalen binären Addition wurde es ziemlich offensichtlich, wie dieser Operator zu konstruieren ist, wenn man über seine Erzeugung und Ausbreitung nachdenkt , aber für negative Übertragungen scheint es nicht so offensichtlich zu sein.