9 คะแนน โดย xguru 2022-02-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การนำมาบวกกันแล้วหาร 2 จะทำให้เกิดโอเวอร์โฟลว์

→ (a + b) / 2

  • ถ้ารู้ว่าค่าไหนมากกว่า ก็สามารถนำผลต่างของสองค่ามาบวกกับค่าน้อยกว่าแล้วหาร 2 ได้

→ low + (high - low) / 2

  • อัลกอริทึมที่ทำได้แม้ไม่รู้ว่าค่าไหนมากกว่ากัน สิทธิบัตรหมดอายุไปแล้วในปี 2016

→ (a / 2) + (b / 2) + (a & b & 1)

  • SWAR : SIMD ภายในรีจิสเตอร์

→ (a & b) + (a ^ b) / 2

  • ถ้าคอมไพเลอร์รองรับ 64 บิต ก็ใช้การแคสต์

→ ((unsigned long long)a + b) / 2

  • หลังจากนั้นก็เป็นโค้ดแอสเซมบลีแยกตามโปรเซสเซอร์... โปรดดูต้นฉบับ

1 ความคิดเห็น

 
xguru 2022-02-10

บล็อก The Old New Thing ของ Raymond Chen ครอบคลุมหัวข้อต่าง ๆ มากมาย ตั้งแต่เบื้องหลังการพัฒนา Windows ไปจนถึงเรื่องหลากหลายอื่น ๆ

ในเกาหลีเคยมีหนังสือแปลออกมาชื่อว่า "Raymond Chen's Windows Development 282 Stories" แต่ปัจจุบันเลิกพิมพ์แล้ว