Tôi có lẽ đã dành nhiều thời gian cho câu hỏi này hơn tôi nên, nhưng đây là những phát hiện của tôi.
Tôi không thể tìm thấy bất kỳ ví dụ nào về bộ cộng tiền tố song song "thuần túy" cho các số âm. Tôi cũng nghĩ đó là một vấn đề mở, vì tôi chưa thấy bằng chứng nào cho thấy nó là không thể.
Gần nhất tôi có thể có được bạn là bằng cách sử dụng một bổ sung phủ định âm hai bước (thường được viết tắt là nnba trong văn học). Nó dựa trên tài sản sau:
Đặt và g ( x ) = x n - 1 ¯ x n - 2 . . . x 1 ¯ x 0 . Về cơ bản, đây là một hoạt động XOR với và tương ứng. Sau đó bạn có thể chứng minh rằngf(x)=xn−1¯¯¯¯¯¯¯¯¯¯xn−2...x1¯¯¯¯¯x0g(x)=xn−1xn−2¯¯¯¯¯¯¯¯¯¯...x1x0¯¯¯¯¯0xAA...AA
0x55...55
−(a+nbb)=g(f(a)+f(b)+1)
+nb+
Tổng âm sau đó có thể được đảo ngược bằng cách sử dụng cùng một thuộc tính nhưng với toán hạng bằng 0:
−x=g(f(x)+f(0)+1)
Vì vậy, để tìm tổng bằng cách sử dụng các bộ cộng tiền tố song song, bạn có thể:
- Tính toán f( a ) và f( b ), I E. bằng cách đảo ngược từng bit lẻ của các số âm
- Tính tổng nhị phân thông thường trong khi thiết lập bit mang cho LSB ( + 1), dẫn đến một khoản tiền trung gian đầu tiên S1.
- Đảo ngược tất cả các bit của S1 (đây là f( g( s1) )). Đây là kết thúc của tổng đầu tiên, trong khi cũng bắt đầu đảo ngược.
- Tăng kết quả bằng
0xAA...AB
(= f( 0 ) + 1) bằng cách sử dụng bộ cộng tiền tố song song, thu được tổng trung gian thứ hai S2
- Tính toán g( s2) (đảo ngược từng bit chẵn) để tìm tổng âm cuối cùng.
Tôi thực sự đã cố gắng tìm một trình cộng tiền tố song song "thuần túy", nhưng tôi cho rằng nó quá phức tạp đối với thời gian tôi sẵn sàng chi cho nó. Đây là lý do tại sao:
Toàn bộ điểm của các bộ cộng tiền tố song song là tìm một số hoạt động của { 0 , 1 }n× { 0 , 1 }n→ { 0 , 1 }ncho phép bạn dễ dàng tính toán (trong trường hợp này 2) mang từ các bit này. Là một ràng buộc bổ sung, hoạt động cần phải được kết hợp để được tính toán song song. Ví dụ, điều này về cơ bản loại trừ bất kỳ toán tử NOT nào (đó không phải là một phần của phủ định kép). Ví dụ:a ∘ b = a ⋅ b¯ không phải là một nhà điều hành liên kết, bởi vì
( Một ∘ b ) ∘ ca∘(b∘c)=a⋅b¯⋅c¯=a⋅b⋅c¯¯¯¯¯¯¯¯¯¯
Note that the boolean operator for the carries in your question includes the mixed terms c+ic−i¯¯¯¯¯ and c−ic+i¯¯¯¯¯, making it impossible to use it as-is. For a single carry in normal binary addition, it became quite obvious how to construct this operator when thinking about it in terms of generation and propagation, but it seems to be not so obvious for negabinary carries.