名前空間
変種
操作

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

From cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(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++11)
(C++11)
最近接整数への浮動小数点数操作
(C++11)(C++11)(C++11)
(C++11)
nearbyint
(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++11)
(C++11)
マクロ定数
分類
(C++11)(C++11)(C++11)(C++11)(C++11)


 
ヘッダー <cmath> で定義
(1)
float        nearbyint ( float num );

double      nearbyint ( double num );

long double nearbyint ( long 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> で定義
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` のオーバーロードを提供します。(since 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 << "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)
丸め方向を取得または設定する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)