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