Namespaces
Variants

std:: fegetround, std:: fesetround

From cppreference.net
Floating-point environment
Functions
fegetround fesetround
(C++11) (C++11)
(C++11) (C++11)
Macro constants
(C++11)
헤더 파일에 정의됨 <cfenv>
int fesetround ( int round )
(1) (C++11 이후)
int fegetround ( )
(2) (C++11 이후)

부동 소수점 반올림 방향을 관리합니다.

1) round 인수와 동일한 부동 소수점 반올림 방향을 설정하려고 시도합니다. 이 인수는 부동 소수점 반올림 매크로 중 하나일 것으로 예상됩니다.
2) 현재 반올림 방향에 해당하는 floating point rounding macro 값을 반환합니다.

목차

매개변수

round - 반올림 방향, 부동 소수점 반올림 매크로 중 하나

반환값

1) 0 성공 시 0, 그렇지 않으면 0이 아닌 값.

2) 현재 반올림 방향을 설명하는 floating point rounding macro 또는 방향을 결정할 수 없는 경우 음수 값.

참고 사항

현재 반올림 모드는 가장 최근의 fesetround 호출의 영향을 반영하며, FLT_ROUNDS 를 통해서도 조회할 수 있습니다.

반올림의 효과에 대해서는 부동 소수점 반올림 매크로 를 참조하십시오.

예제

#include <cfenv>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <utility>
// #pragma STDC FENV_ACCESS ON
int main()
{
    static constexpr std::pair<const char*, const double> samples[]
    {
        {" 12.0", 12.0},  {" 12.1", 12.1}, {"-12.1", -12.1}, {" 12.5", 12.5},
        {"-12.5", -12.5}, {" 12.9", 12.9}, {"-12.9", -12.9}, {" 13.0", 13.0}
    };
    std::cout <<
        "│ sample │  FE_DOWNWARD  │   FE_UPWARD   │ FE_TONEAREST  │ FE_TOWARDZERO │\n";
    for (const auto& [str, fp] : samples)
    {
        std::cout << "│ " << std::setw(6) << str << " │  ";
        for (const int dir : {FE_DOWNWARD, FE_UPWARD, FE_TONEAREST, FE_TOWARDZERO})
        {
            std::fesetround(dir);
            std::cout << std::setw(10) << std::fixed << std::nearbyint(fp) << "   │  ";
        }
        std::cout << '\n';
    }
}

출력:

│ sample │  FE_DOWNWARD  │   FE_UPWARD   │ FE_TONEAREST  │ FE_TOWARDZERO │
│   12.0 │   12.000000   │   12.000000   │   12.000000   │   12.000000   │
│   12.1 │   12.000000   │   13.000000   │   12.000000   │   12.000000   │
│  -12.1 │  -13.000000   │  -12.000000   │  -12.000000   │  -12.000000   │
│   12.5 │   12.000000   │   13.000000   │   12.000000   │   12.000000   │
│  -12.5 │  -13.000000   │  -12.000000   │  -12.000000   │  -12.000000   │
│   12.9 │   12.000000   │   13.000000   │   13.000000   │   12.000000   │
│  -12.9 │  -13.000000   │  -12.000000   │  -13.000000   │  -12.000000   │
│   13.0 │   13.000000   │   13.000000   │   13.000000   │   13.000000   │

참고 항목

(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 documentation for fegetround , fesetround