Dot Programming/Java
2022. 2. 13.
[Play with Java] 자바에서 오버플로우 없이 2개의 INT 평균 구하기
(a + b) / 2 더해서 2로 나누는 것은 오버플로우가 발생한다. int a = 1_894_234_753; int b = 1_882_312_653; System.out.println((a+b)/2); // -259209945 low + (high - low) / 2 둘중에 큰 수를 알면 두 값의 차이를 작은 수에 더해서 2로 나누는 것도 가능하다. int low = 1_894_234_753; int high = 1_882_312_653; System.out.println(low + (high-low)/2); // 1888273703 (a / 2) + (b / 2) + (a & b & 1) 어떤게 큰 수인지 몰라도 가능한 알고리듬은 2016년에 특허가 만료되었다. 홀수 + 홀수일 경우 1이 생략되기 때..