C++ 11は std :: nearbyint および std :: round 関数を導入しました。どちらも「最も近い」整数値を返します。
いつ、どこでどちらを選ぶべきですか?
0.5
の値でテストしました:
ケース1: nearlyintのデモ
#include <iostream>
#include <cmath>
int main()
{
std::cout<<"nearbyint(0.5) = "<<std::nearbyint(0.5);
}
出力:0
ケース2:ラウンドのデモ
#include <iostream>
#include <cmath>
int main()
{
std::cout<<"round(0.5) = "<<std::round(0.5);
}
出力:1
なぜ出力が異なるのですか?
std::round
関数は 現在の丸めモード を無視しますが、std::nearbyint
はそれを考慮します。丸めモードを変更できます。
#include <cfenv>
int main() {
std::fesetround(FE_UPWARD);
// perform calculations
std::fesetround(FE_DOWNWARD);
// perform calculations
// other rounding methods...
}
さまざまな結果を観察します。現在の丸めモードの値を取得するには、 std :: fegetround() 関数を使用します。可能性はデフォルト(実装定義)値は0
であり、これはFE_TONEAREST
に変換されます。