名前空間
変種
操作

std::nearbyint

提供: 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)
 
ヘッダ <cmath> で定義
float       nearbyint( float arg );
(1) (C++11およびそれ以降)
double      nearbyint( double arg );
(2) (C++11およびそれ以降)
long double nearbyint( long double arg );
(3) (C++11およびそれ以降)
double      nearbyint( Integral arg );
(4) (C++11およびそれ以降)
1-3) 現在の丸めモードを使用して、浮動小数点引数 arg を浮動小数点形式の整数値に丸めます。
4) 任意の整数型の引数を受け取るオーバーロード集合または関数テンプレート。 (2) と同等です (引数は double にキャストされます)。

目次

[編集] 引数

arg - 浮動小数点値

[編集] 戻り値

現在の丸めモードに従った、 arg に最も近い整数が返されます。

[編集] エラー処理

この関数は math_errhandling で規定されているいかなるエラーの対象でもありません。

処理系が IEEE 浮動小数点算術 (IEC 60559) をサポートしている場合、

  • FE_INEXACT が発生することはありません。
  • arg が ±∞ であれば、それが変更せずに返されます。
  • arg が ±0 であれば、それが変更せずに返されます。
  • arg が NaN であれば、 NaN が返されます。

[編集] ノート

std::nearbyintstd::rint の唯一の違いは、 std::nearbyintFE_INEXACT を発生させないことです。

すべての標準の浮動小数点フォーマットにおいて、最も大きな表現可能な浮動小数点値は正確な整数であるため、 std::nearbyint それ自体はオーバーフローすることはありません。 しかし任意の整数型 (std::intmax_t も含みます) は、整数変数に格納するとき、結果がオーバーフローするかもしれません。

現在の丸めモードが FE_TONEAREST の場合、この関数は (rint と同様に、しかし round とは異なり)、中間の場合、偶数に丸めます。

[編集]

#include <iostream>
#include <cmath>
#include <cfenv>
 
int main()
{
#pragma STDC FENV_ACCESS ON
    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)
現在の丸めモードを使用して最も近い整数に丸めますが、結果が異なる場合は例外を発生します
(関数) [edit]
(C++11)(C++11)(C++11)
最も近い整数を返します。 ちょうど中間の場合はゼロから離れる方向に丸めます
(関数) [edit]
(C++11)(C++11)
丸め方向を取得または設定します
(関数) [edit]