はじめに
C++で浮動小数点数(double
やfloat
)を扱う際、一般的な「四捨五入」のように、最も近い整数に丸めたい場合があります。
この目的のために、C++11以降の標準ライブラリ <cmath>
には std::round
という、まさにそのための関数が用意されています。
この記事では、round
関数の基本的な使い方と、.5
の場合の挙動について解説します。
【前提】C++11とは?
C++11(シーピープラスいちいち)は、2011年に正式化されたC++言語のメジャーアップデート版です。std::round
はこのC++11で導入されたため、利用するにはC++11以降に対応したコンパイラが必要です。
round
を使ったサンプルコード
このコードは、いくつかの正の数と負の数に対して round
を適用し、その結果を出力します。
完成コード
#include <iostream>
#include <cmath> // round 関数を使うために必要
using namespace std;
int main() {
cout << "--- round() のテスト ---" << endl;
// 正の数の場合
cout << "3.4 -> " << round(3.4) << endl; // -> 3
cout << "3.5 -> " << round(3.5) << endl; // -> 4
cout << "3.6 -> " << round(3.6) << endl; // -> 4
cout << "\n";
// 負の数の場合
cout << "-3.4 -> " << round(-3.4) << endl; // -> -3
cout << "-3.5 -> " << round(-3.5) << endl; // -> -4
cout << "-3.6 -> " << round(-3.6) << endl; // -> -4
return 0;
}
コードの解説と挙動
std::round(x)
- 機能: 引数
x
を、最も近い整数値に丸めます。 - 戻り値: 丸められた値を、
double
やfloat
などの浮動小数点数型で返します。 .5
の扱い: 小数部がちょうど0.5
の場合、ゼロから遠い方の整数に丸められます。round(3.5)
は4
になります。round(-3.5)
は-4
になります。
これは、日本の小学校で習う「四捨五入」(JIS Z 8401)が .5
の場合に常に大きい方の整数へ丸める(例: -3.5
→ -3
)のとは、負の数において挙動が異なるため、注意が必要です。
rint
や nearbyint
との違い
<cmath>
には、rint
や nearbyint
といった、よく似た丸め関数も存在します。これらは、.5
の場合に「最も近い偶数の整数」に丸める(最近接偶数への丸め、または銀行家の丸め)という、異なる丸め規則を採用しています。一般的な四捨五入の用途では、round
を使うのが最も直感的です。
まとめ
今回は、C++11の<cmath>
ライブラリを使って、浮動小数点数を最も近い整数に丸める std::round
関数を解説しました。
<cmath>
ヘッダーをインクルードする。round(数値)
の形で呼び出す。- 小数部が
.5
の場合は、**絶対値が大きい方(ゼロから遠い方)**の整数に丸められる。
一般的な「四捨五入」のロジックを実装したい場合に、round
は最もシンプルで分かりやすい選択肢です。