std:: sub_sat
|
헤더 파일에 정의됨
<numeric>
|
||
|
template
<
class
T
>
constexpr T sub_sat ( T x, T y ) noexcept ; |
(C++26부터) | |
포화
뺄셈
x
-
y
을 계산합니다. 이 연산은 (내장
정수 연산
와 달리) 무한한 범위를 가진 수학적 연산인 것처럼 동작합니다.
q
를 이러한 연산의 결과라고 가정합니다.
반환값:
-
q, 만약q가 타입T의 값으로 표현 가능한 경우. 그렇지 않으면, -
타입
T의 가장 큰 값 또는 가장 작은 값 중q에 더 가까운 값.
이 오버로드는
T
가
정수형
인 경우에만 오버로드 해결에 참여합니다. 즉:
signed
char
,
short
,
int
,
long
,
long
long
, 확장 부호 정수형 또는 이러한 타입들의 부호 없는 버전입니다. 특히,
T
는 (cv 한정자가 있을 수 있는)
bool
,
char
,
wchar_t
,
char8_t
,
char16_t
, 그리고
char32_t
일 수 없습니다. 이러한 타입들은 산술 연산을 목적으로 하지 않기 때문입니다.
목차 |
매개변수
| x, y | - | 정수 값 |
반환값
포화된 x - y .
참고 사항
정수에 대한 내장 산술 연산자와 달리, integral promotion 은 x 와 y 인수에는 적용되지 않습니다.
서로 다른 타입의 인수 두 개가 전달되면, 호출은 컴파일되지 않습니다. 즉, 템플릿 인수 추론 에 관한 동작은 std::min 또는 std::max 와 동일합니다.
대부분의 현대 하드웨어 아키텍처는 SIMD 벡터 에 대한 포화 연산을 효율적으로 지원합니다. 여기에는 SSE2 ( x86 용)와 NEON ( ARM 용)이 포함됩니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_saturation_arithmetic
|
202311L
|
(C++26) | 포화 산술 |
가능한 구현
참조: libstdc++ (gcc) .
예제
다음에서 미리 볼 수 있습니다: Compiler Explorer
#include <climits> #include <numeric> static_assert ("" && (std::sub_sat<int>(INT_MIN + 4, 3) == INT_MIN + 1) // not saturated && (std::sub_sat<int>(INT_MIN + 4, 5) == INT_MIN) // saturated && (std::sub_sat<int>(INT_MAX - 4, -3) == INT_MAX - 1) // not saturated && (std::sub_sat<int>(INT_MAX - 4, -5) == INT_MAX) // saturated && (std::sub_sat<unsigned>(4, 3) == 1) // not saturated && (std::sub_sat<unsigned>(4, 5) == 0) // saturated ); int main() {}
참고 항목
|
(C++26)
|
두 정수에 대한 포화 덧셈 연산
(함수 템플릿) |
|
(C++26)
|
두 정수에 대한 포화 곱셈 연산
(함수 템플릿) |
|
(C++26)
|
두 정수에 대한 포화 나눗셈 연산
(함수 템플릿) |
|
(C++26)
|
다른 정수 타입의 범위로 고정된 정수 값을 반환
(함수 템플릿) |
|
(C++17)
|
값을 한 쌍의 경계값 사이로 고정
(함수 템플릿) |
|
(C++20)
|
정수 값이 주어진 정수 타입의 범위 내에 있는지 확인
(함수 템플릿) |
|
[static]
|
주어진 비부동소수점 타입의 가장 작은 유한값, 또는 주어진 부동소수점 타입의 가장 작은 양의 정규값을 반환
(
std::numeric_limits<T>
의 public static 멤버 함수)
|
|
[static]
|
주어진 타입의 가장 큰 유한값을 반환
(
std::numeric_limits<T>
의 public static 멤버 함수)
|
외부 링크
| 1. | 브랜치 없는 포화 연산 구현 — Locklessinc.com, 2012 |
| 2. | C++ Weekly - Ep 459 - C++26의 포화 수학 연산 — Youtube.com, 2024-12-16 |