오버플로우 없이 2개 unsigned int의 평균 구하기
(devblogs.microsoft.com)- 더해서 2로 나누는 것은 오버플로우가 발생
ㅤ→ (a + b) / 2
- 둘중에 큰 수를 알면 두 값의 차이를 작은 수에 더해서 2로 나누는 것도 가능
ㅤ→ low + (high - low) / 2
- 어떤게 큰 수인지 몰라도 가능한 알고리듬은 2016년에 특허가 만료됨
ㅤ→ (a / 2) + (b / 2) + (a & b & 1)
- SWAR : SIMD within a register
ㅤ→ (a & b) + (a ^ b) / 2
- 컴파일러가 64비트를 지원한다면 캐스팅
ㅤ→ ((unsigned long long)a + b) / 2
* 그리고 그 다음은 프로세서별 어셈블리 코드들.. 원문을 참고 하세요
레이몬드 첸의 블로그 The Old New Thing 은 윈도우 개발 뒷얘기 부터 다양한 주제를 다루고 있습니다.
국내에는 "레이몬드 첸의 윈도우 개발 282 스토리" 라고 번역서가 나왔었지만 현재는 절판입니다.