Cách tính trung bình của 2 `unsigned int` mà không bị tràn số
(devblogs.microsoft.com)- Cộng rồi chia cho 2 sẽ gây ra tràn số
→ (a + b) / 2
- Nếu biết số nào lớn hơn trong hai số, cũng có thể lấy hiệu của hai giá trị cộng vào số nhỏ hơn rồi chia cho 2
→ low + (high - low) / 2
- Một thuật toán vẫn dùng được ngay cả khi không biết số nào lớn hơn đã hết hạn bằng sáng chế vào năm 2016
→ (a / 2) + (b / 2) + (a & b & 1)
- SWAR: SIMD within a register
→ (a & b) + (a ^ b) / 2
- Nếu trình biên dịch hỗ trợ 64-bit thì có thể ép kiểu
→ ((unsigned long long)a + b) / 2
- Và sau đó là mã assembly theo từng bộ xử lý... hãy tham khảo bài gốc
1 bình luận
Blog The Old New Thing của Raymond Chen đề cập đến nhiều chủ đề, từ những câu chuyện hậu trường phát triển Windows đến các chủ đề đa dạng khác.
Ở Hàn Quốc từng có bản dịch xuất bản với tên "282 câu chuyện phát triển Windows của Raymond Chen", nhưng hiện nay đã ngừng phát hành.