C 言語の round 関数
-
関数
roundを使って浮動小数点数を最も近い整数に丸めて浮動小数点数を返す -
関数
lroundを用いて浮動小数点数を最も近い整数に丸めて積分型を返す -
関数
ceilを用いて浮動小数点数を引数以下の最小の積分値に丸める
この記事では、C 言語で round 関数を使用する方法をいくつか説明します。
関数 round を使って浮動小数点数を最も近い整数に丸めて浮動小数点数を返す
関数 round は <math.h> ヘッダファイルで定義されている C 標準ライブラリの数学ユーティリティの一部です。このファミリには、round、roundf、roundl の 3つの関数があります。これらの関数は異なる型の浮動小数点数に対応しており、それぞれが対応する型の値を返します。math ヘッダを含むソースファイルは、ライブラリコードをリンクするために -lm フラグを使ってコンパイルする必要があることに注意してください。以下のコード例では、複数の float リテラル値に対する変換を示し、その結果をコンソールに出力しています。round は本質的にゼロから丸めていることに注意してください。引数に積分値 -0、+0、NaN、INFINITY を渡すと、同じ値が返されます。
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("round(+2.3) = %+.1f\n", round(2.3));
printf("round(+2.5) = %+.1f\n", round(2.5));
printf("round(+2.7) = %+.1f\n", round(2.7));
printf("round(-2.3) = %+.1f\n", round(-2.3));
printf("round(-2.5) = %+.1f\n", round(-2.5));
printf("round(-2.7) = %+.1f\n", round(-2.7));
exit(EXIT_SUCCESS);
}
出力:
round(+2.3) = +2.0
round(+2.5) = +3.0
round(+2.7) = +3.0
round(-2.3) = -2.0
round(-2.5) = -3.0
round(-2.7) = -3.0
関数 lround を用いて浮動小数点数を最も近い整数に丸めて積分型を返す
一方、関数 lround は整数に最も近い値に丸めて積分値を返します。このファミリには 6つの関数があり、そのうちの半分の関数は long int を丸めた値として返し、その他の関数は long long int を返します。lround は round ファミリーに似ており、中途半端な実数をゼロから遠ざけるように丸めます。
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("lround(+2.3) = %ld\n", lround(2.3));
printf("lround(+2.5) = %ld\n", lround(2.5));
printf("lround(+2.7) = %ld\n", lround(2.7));
printf("lround(-2.3) = %ld\n", lround(-2.3));
printf("lround(-2.5) = %ld\n", lround(-2.5));
printf("lround(-2.7) = %ld\n", lround(-2.7));
exit(EXIT_SUCCESS);
}
出力:
lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3
関数 ceil を用いて浮動小数点数を引数以下の最小の積分値に丸める
あるいは、関数 ceil を利用して、与えられた浮動小数点数を、引数そのものよりも小さくない最小の整数値に丸めることもできます。関数 round と同様に、このファミリにも 3つの関数があります - ceil、ceilf、ceill で、それぞれ float、double、long double 型に利用されます。prinf 指定文字列に + 記号を含めると、丸められた引数に対応する記号が自動的に表示されることに注意してください。
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("ceil(+2.3) = %+.1f\n", ceil(2.3));
printf("ceil(+2.5) = %+.1f\n", ceil(2.5));
printf("ceil(+2.7) = %+.1f\n", ceil(2.7));
printf("ceil(-2.3) = %+.1f\n", ceil(-2.3));
printf("ceil(-2.5) = %+.1f\n", ceil(-2.5));
printf("ceil(-2.7) = %+.1f\n", ceil(-2.7));
exit(EXIT_SUCCESS);
}
出力:
ceil(+2.3) = 3.000000
ceil(+2.5) = 3.000000
ceil(+2.7) = 3.000000
ceil(-2.3) = -2.000000
ceil(-2.5) = -2.000000
ceil(-2.7) = -2.000000
