std::nearbyint, std::nearbyintf, std::nearbyintl
From cppreference.com
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float nearbyint ( float num ); double nearbyint ( double num ); |
(C++23まで) | |
| /*浮動小数点数型*/ nearbyint ( /*浮動小数点型*/ 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) | |
1-3) 浮動小数点引数 num を、現在の丸めモードを使用して、浮動小数点形式の整数値に丸めます。ライブラリは、パラメータの型としてすべてのcvなし浮動小数点型に対して `std::nearbyint` のオーバーロードを提供します。(since C++23)
|
S) SIMD オーバーロードは、v_num に対して要素ごとの `std::nearbyint` を実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(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 << "rounding to nearest: \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 << "rounding down:\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'; }
出力
rounding to nearest: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 4 nearbyint(-2.3) = -2 nearbyint(-2.5) = -2 nearbyint(-3.5) = -4 rounding down: 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) |
最近接整数、中間値はゼロから遠い方に丸める (関数) |
| (C++11)(C++11) |
丸め方向を取得または設定する (関数) |
| C のドキュメント (nearbyint)
| |