saturating_div — std::saturating_div

saturating_div — std::saturating_div (포화 나눗셈)

std::saturating_div포화(saturating) 나눗셈을 수행해요. C++26에서 도입됐어요.

나눗셈 결과가 타입 범위를 넘으면 오버플로 대신 최댓값/최솟값으로 고정돼요.

출처: cppreference

본문

// <numeric> 헤더
template< class T >
constexpr T saturating_div( T a, T b ) noexcept;
#include <climits>
#include <numeric>

static_assert(
    std::saturating_div<int>(6, 3) == 2          // 포화 없음
    && std::saturating_div<int>(INT_MIN, -1) == INT_MAX  // 포화!
    && std::saturating_div<unsigned>(6, 3) == 2  // 포화 없음
);

특징

  • 일반 정수 나눗셈에서 INT_MIN / -1은 오버플로로 UB예요. saturating_div는 이를 INT_MAX로 포화시켜요.
  • 0으로 나누는 경우는 여전히 오류 처리 대상이에요 (함수에 따라).
  • 부호 있는/부호 없는 타입 모두 지원해요.
  • constexpr, noexcept.
int r1 = std::saturating_div<int>(10, 2);     // 5
int r2 = std::saturating_div<int>(INT_MIN, -1);  // INT_MAX (안전)

포화 나눗셈은 정수 나눗셈의 위험한 오버플로 경계를 안전하게 처리하는 데 유용해요. C++26의 std::saturating_* 계열이 제공해요.

더 알아보기 (Learn more)

cppreference