std:: nearbyint, std:: nearbyintf, std:: nearbyintl
|
헤더에 정의됨
<cmath>
|
||
| (1) | ||
|
float
nearbyint
(
float
num
)
;
double
nearbyint
(
double
num
)
;
|
(C++23 이전) | |
|
/*floating-point-type*/
nearbyint ( /*floating-point-type*/ num ) ; |
(C++23 이후) | |
|
float
nearbyintf
(
float
num
)
;
|
(2) | (C++11 이후) |
|
long
double
nearbyintl
(
long
double
num
)
;
|
(3) | (C++11 이후) |
|
SIMD 오버로드
(C++26 이후)
|
||
|
헤더에 정의됨
<simd>
|
||
|
template
<
/*math-floating-point*/
V
>
constexpr
/*deduced-simd-t*/
<
V
>
|
(S) | (C++26 이후) |
|
추가 오버로드
(C++11 이후)
|
||
|
헤더에 정의됨
<cmath>
|
||
|
template
<
class
Integer
>
double nearbyint ( Integer num ) ; |
(A) | |
std::nearbyint
의 오버로드를 제공합니다.
(C++23부터)
|
S)
SIMD 오버로드는
v_num
에 대해 요소별(element-wise)
std::nearbyint
를 수행합니다.
|
(C++26부터) |
|
A)
모든 정수 타입에 대해 추가 오버로드가 제공되며, 이들은
double
로 처리됩니다.
|
(since C++11) |
목차 |
매개변수
| num | - | 부동 소수점 또는 정수 값 |
반환값
num 에 가장 가까운 정수 값을 현재 반올림 모드 에 따라 반환합니다.
오류 처리
이 함수는 math_errhandling 에 지정된 어떤 오류에도 영향을 받지 않습니다.
구현이 IEEE 부동 소수점 연산(IEC 60559)을 지원하는 경우,
- FE_INEXACT 는 절대로 발생하지 않습니다.
- 만약 num 이 ±∞이면, 수정 없이 그대로 반환됩니다.
- 만약 num 이 ±0이면, 수정 없이 그대로 반환됩니다.
- 만약 num 이 NaN이면, NaN이 반환됩니다.
참고 사항
std::nearbyint
와
std::rint
사이의 유일한 차이점은
std::nearbyint
가 절대
FE_INEXACT
를 발생시키지 않는다는 것입니다.
표준 부동 소수점 형식에서 표현 가능한 가장 큰 부동 소수점 값들은 모두 정확한 정수이므로,
std::nearbyint
는 단독으로는 절대 오버플로우를 일으키지 않습니다; 그러나 결과를 정수 변수(예:
std::intmax_t
를 포함한 모든 정수 타입)에 저장할 때는 오버플로우가 발생할 수 있습니다.
현재 반올림 모드가 FE_TONEAREST 인 경우, 이 함수는 중간 값에서 짝수로 반올림합니다( std::rint 와 유사하지만 std::round 와는 다릅니다).
추가 오버로드는 반드시 (A) 와 정확히 동일하게 제공될 필요는 없습니다. 정수 타입의 인수 num 에 대해, std :: nearbyint ( num ) 가 std :: nearbyint ( static_cast < double > ( num ) ) 와 동일한 효과를 가지도록 보장하기에 충분하기만 하면 됩니다.
예제
#include <cfenv> #include <cmath> #include <iostream> #pragma STDC FENV_ACCESS ON int main() { std::fesetround(FE_TONEAREST); std::cout << "가장 가까운 값으로 반올림: \n" << "nearbyint(+2.3) = " << std::nearbyint(2.3) << " nearbyint(+2.5) = " << std::nearbyint(2.5) << " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n' << "nearbyint(-2.3) = " << std::nearbyint(-2.3) << " nearbyint(-2.5) = " << std::nearbyint(-2.5) << " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n'; std::fesetround(FE_DOWNWARD); std::cout << "아래 방향으로 반올림:\n" << "nearbyint(+2.3) = " << std::nearbyint(2.3) << " nearbyint(+2.5) = " << std::nearbyint(2.5) << " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n' << "nearbyint(-2.3) = " << std::nearbyint(-2.3) << " nearbyint(-2.5) = " << std::nearbyint(-2.5) << " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n'; std::cout << "nearbyint(-0.0) = " << std::nearbyint(-0.0) << '\n' << "nearbyint(-Inf) = " << std::nearbyint(-INFINITY) << '\n'; }
출력:
가장 가까운 값으로 반올림: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 4 nearbyint(-2.3) = -2 nearbyint(-2.5) = -2 nearbyint(-3.5) = -4 아래 방향으로 반올림: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 3 nearbyint(-2.3) = -3 nearbyint(-2.5) = -3 nearbyint(-3.5) = -4 nearbyint(-0.0) = -0 nearbyint(-Inf) = -inf
참고 항목
|
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
|
현재 반올림 모드를 사용하여 가장 가까운 정수로 변환
(결과가 다를 경우 예외 발생) (함수) |
|
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
|
가장 가까운 정수로 변환 (중간값일 경우 0에서 멀어지는 방향으로 반올림)
(함수) |
|
(C++11)
(C++11)
|
반올림 방향을 얻거나 설정
(함수) |
|
C documentation
for
nearbyint
|
|