>백엔드 개발 >C++ >C/C에서 정수 나눗셈을 효율적으로 반올림하는 방법은 무엇입니까?

C/C에서 정수 나눗셈을 효율적으로 반올림하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-24 04:29:10832검색

How to Efficiently Round Up Integer Division in C/C  ?

C/C에서 정수 나누기 위쪽으로 반올림

C/C에서 두 정수 x와 y를 나눌 때 결과 q = x/ y는 부동 소수점 이하의 바닥을 산출합니다. 그러나 ceil(10/5) = 2 또는 ceil(11/5) = 3과 같이 대신 상한선을 얻는 것이 바람직한 시나리오도 있습니다.

상한선 분할에 대한 비효율적인 접근 방식

천장 분할에 대한 일반적인 접근 방식 중 하나는 바닥을 비교하고 늘리는 것입니다. 값:

q = x / y;
if (q * y < x) ++q;

이 방법은 효과적이지만 성능에 영향을 줄 수 있는 추가 비교 및 ​​곱셈을 필요로 합니다.

효율적인 천장 분할 알고리즘

비효율적인 접근 방식의 한계를 피하려면 q가 x의 상한선을 다음으로 나눈 값인 양수에 대해 다음 알고리즘을 고려하세요. y:

unsigned int x, y, q;

// Round up using (x + y - 1) / y
q = (x + y - 1) / y;

대체 오버플로 방지 알고리즘

또는 x y에서 잠재적인 오버플로를 방지하려면 다음 공식을 사용하세요.

// Round up using 1 + ((x - 1) / y) if x != 0
q = 1 + ((x - 1) / y);

이러한 효율적인 알고리즘을 사용하면 추가 비교의 함정을 피할 수 있습니다. 곱셈 및 부동 소수점 캐스팅을 통해 더 빠르고 정확한 천장 분할 작업이 가능합니다.

위 내용은 C/C에서 정수 나눗셈을 효율적으로 반올림하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.