Tôi đã tìm thấy một mẹo từ AGGREGATE Magic cho các giá trị tối đa tính toán nhanh. Vấn đề duy nhất mà đây là cho số nguyên, và tuy nhiên tôi đã thử một số điều, không có ý tưởng làm thế nào để làm cho một phiên bản cho số nguyên unsigned.Tối đa chi nhánh nhanh cho các số nguyên không dấu
inline int32_t max(int32_t a, int32_t b)
{
return a - ((a-b) & (a-b)>>31);
}
Bạn có lời khuyên nào?
EDIT
Không sử dụng này, bởi vì như những người khác nói nó tạo ra hành vi không xác định. Đối với bất kỳ kiến trúc hiện đại nào, trình biên dịch sẽ có thể phát ra một lệnh di chuyển có điều kiện không có nhánh từ return (a > b) ? a : b
, sẽ nhanh hơn hàm được đề cập.
Chờ đợi, bạn có thực sự chắc chắn điều này nhanh hơn 'return a> b? a: b'? –
Chức năng này khá là vô ích. Sử dụng 'std :: max'. –
Vâng, trên các CPU hiện đại với đường ống, các nhánh đang chậm. Tôi đã đo, phiên bản này nhanh như phiên bản SSE, nếu không nhanh hơn. – plasmacel