Namespaces
Variants

std:: nearbyint, std:: nearbyintf, std:: nearbyintl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
nearbyint
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
ヘッダーで定義 <cmath>
(1)
float nearbyint ( float num ) ;

double nearbyint ( double num ) ;

long double nearbyint ( long 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>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

nearbyint ( const V & v_num ) ;
(S) (C++26から)
ヘッダーで定義 <cmath>
template < class Integer >
double nearbyint ( Integer num ) ;
(A)
1-3) 浮動小数点引数 num を、 現在の丸めモード を使用して浮動小数点形式の整数値に丸めます。 ライブラリは、パラメータの型としてすべてのcv修飾されていない浮動小数点型に対する std::nearbyint のオーバーロードを提供します。 (C++23以降)
S) SIMDオーバーロードは v_num に対して要素ごとの std::nearbyint を実行します。
(定義については math-floating-point および deduced-simd-t を参照)
(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 << "最近接丸め: \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ドキュメント for nearbyint