目次
はじめに
C++で浮動小数点数(double
やfloat
)を扱う際、小数点以下を特定のルールで丸めたい(整数にしたい)場面は頻繁にあります。
標準ライブラリの <cmath>
(C言語では <math.h>
) ヘッダーには、このための便利な関数が用意されています。
std::floor
: 床 (floor) の方向、つまり負の無限大方向へ丸めます。(切り捨て)std::ceil
: 天井 (ceiling) の方向、つまり正の無限大方向へ丸めます。(切り上げ)
この記事では、これら2つの関数の基本的な使い方と、正の数と負の数での挙動の違いについて解説します。
floor
/ ceil
を使ったサンプルコード
このコードは、正の数と負の数、それぞれに対して floor
と ceil
を適用し、その結果を出力します。
完成コード
#include <iostream>
#include <cmath> // floor, ceil 関数を使うために必要
using namespace std;
int main() {
double positive_value = 5.7;
double negative_value = -5.7;
cout << "--- 正の数の場合 (5.7) ---" << endl;
// floor: 5.7 を超えない最大の整数 -> 5
cout << "切り捨て (floor): " << floor(positive_value) << endl;
// ceil: 5.7 以上の最小の整数 -> 6
cout << "切り上げ (ceil): " << ceil(positive_value) << endl;
cout << "\n--- 負の数の場合 (-5.7) ---" << endl;
// floor: -5.7 を超えない最大の整数 -> -6
cout << "切り捨て (floor): " << floor(negative_value) << endl;
// ceil: -5.7 以上の最小の整数 -> -5
cout << "切り上げ (ceil): " << ceil(negative_value) << endl;
return 0;
}
実行結果
--- 正の数の場合 (5.7) ---
切り捨て (floor): 5
切り上げ (ceil): 6
--- 負の数の場合 (-5.7) ---
切り捨て (floor): -6
切り上げ (ceil): -5
コードの解説
std::floor(x)
(切り捨て)
floor
(床) 関数は、引数 x
を超えない最大の整数を double
型で返します。数直線をイメージすると、常に左側(小さい方)の整数に丸められます。
floor(5.7)
は5
floor(-5.7)
は-6
(-5
ではないことに注意)
std::ceil(x)
(切り上げ)
ceil
(天井) 関数は、引数 x
以上の最小の整数を double
型で返します。数直線をイメージすると、常に右側(大きい方)の整数に丸められます。
ceil(5.7)
は6
ceil(-5.7)
は-5
0
への切り捨て (trunc
)
もし、単純に小数点以下を切り捨てたい(正負を問わず 5.7
も -5.7
も 5
と -5
にしたい)場合は、trunc
(truncate) 関数を使います。
C++
cout << trunc(5.7); // -> 5
cout << trunc(-5.7); // -> -5
まとめ
今回は、C++の<cmath>
ライブラリを使って、浮動小数点数を切り捨て・切り上げする方法を解説しました。
floor(x)
:x
を超えない最大の整数(常に小さい方へ)。ceil(x)
:x
以上の最小の整数(常に大きい方へ)。trunc(x)
:0
の方向へ、小数点以下を単純に切り捨てる。
これらの関数は、浮動小数点数から整数への変換ルールを明確にする上で非常に重要です。それぞれの挙動の違い、特に負の数に対する動作を正確に理解し、目的に応じて適切に使い分けましょう。