std::numeri...round_style(3)
π NAME π
std::numeric_limits::round_style β std::numeric_limits::round_style
okay bestie, welcome to the std::numeri...round_style(3) page from the C++ Standard Libary manual. This is literally the glow-up guide to how your floating-point type rounds stuff when a value isn't exactly representable. iconic behavior only β¨
β¨ Synopsis β¨
static const std::float_round_style round_style; (until C++11)
static constexpr std::float_round_style round_style; (since C++11)
The value of std::numeric_limits<T>::round_style identifies the rounding style used by the floating-point type T whenever a value that is not one of the exactly representable values of T is stored in an object of that type. no cap, that's the whole vibe π
π Standard specializations π
Here's the value of std::numeric_limits<T>::round_style for each T, bestie:
/* non-specialized */βstd::round_toward_zeroboolβstd::round_toward_zerocharβstd::round_toward_zerosigned charβstd::round_toward_zerounsigned charβstd::round_toward_zerowchar_tβstd::round_toward_zerochar8_t(since C++20) βstd::round_toward_zerochar16_t(since C++11) βstd::round_toward_zerochar32_t(since C++11) βstd::round_toward_zeroshortβstd::round_toward_zerounsigned shortβstd::round_toward_zerointβstd::round_toward_zerounsigned intβstd::round_toward_zerolongβstd::round_toward_zerounsigned longβstd::round_toward_zerolong long(since C++11) βstd::round_toward_zerounsigned long long(since C++11) βstd::round_toward_zerofloatβ usuallystd::round_to_nearestdoubleβ usuallystd::round_to_nearestlong doubleβ usuallystd::round_to_nearest
π§ Notes π§
These values are constants, and do not reflect the changes to the rounding made by std::fesetround. The changed values may be obtained from FLT_ROUNDS or std::fegetround. so yeah, don't expect this constant to spill the tea about runtime rounding changes π
π Example π
The decimal value 0.1 cannot be represented by a binary floating-point type. When stored in an IEEE-754 double, it falls between 0x1.9999999999999*2-4 and 0x1.999999999999a*2-4. Rounding to nearest representable value results in 0x1.999999999999a*2-4. π¦
Similarly, the decimal value 0.3, which is between 0x1.3333333333333*2-2 and 0x1.3333333333334*2-2, is rounded to nearest and is stored as 0x1.3333333333333*2-2. literally math with main character energy π
// Run this code
#include <iostream>
#include <limits>
auto print(std::float_round_style frs)
{
switch (frs)
{
case std::round_indeterminate:
return "Rounding style cannot be determined";
case std::round_toward_zero:
return "Rounding toward zero";
case std::round_to_nearest:
return "Rounding toward nearest representable value";
case std::round_toward_infinity:
return "Rounding toward positive infinity";
case std::round_toward_neg_infinity:
return "Rounding toward negative infinity";
}
return "unknown round style";
}
int main()
{
std::cout << std::hexfloat
<< "The decimal 0.1 is stored in a double as "
<< 0.1 << '\n'
<< "The decimal 0.3 is stored in a double as "
<< 0.3 << '\n'
<< print(std::numeric_limits<double>::round_style) << '\n';
}
Output:
The decimal 0.1 is stored in a double as 0x1.999999999999ap-4
The decimal 0.3 is stored in a double as 0x1.3333333333333p-2
Rounding toward nearest representable value
π See also π
float_round_styleβ indicates floating-point rounding modes (enum)
xoxo, your bestie π β source: http://cppreference.com, version/date: 2024.06.10, page: std::numeri...round_style(3) ππ
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms