【C言語】小数点以下を切り上げるceil関数の使い方を解説

C言語には、数学的な計算を行うための様々な関数が用意されています。

その中でも、今回は「ceil関数」について詳しく解説していきます。

ceil関数は、引数として与えられた実数値を切り上げて整数値を返す関数です。この記事では、ceil関数の使い方や注意点についてサンプルコードを交えてわかりやすく解説します。

目次

C言語のceil関数の使い方

ceil関数は引数で与えられた実数を切り上げた整数を返す関数です。

例えば、引数に2.3を渡した場合、ceil関数は3を返します。また、引数に-1.5を渡した場合、ceil関数は-1を返します。

ceil関数の使い方

ceil関数はmath.hライブラリに含まれています。そのため、プログラムの先頭で以下のようにインクルードする必要があります。

#include <math.h>

次に、以下のようにceil関数を使用することができます。

double d = 3.14;
d = ceil(d);
printf("%lf",d);

このようにして、与えられたdの値を切り上げた整数値が返されます。

ceil関数の注意点

浮動小数点数の誤差について

C言語の浮動小数点数は、2進数で表現されるため、10進数で表現される小数とは異なる値を持つことがあります。そのため、計算結果に誤差が生じることがあります。

ceil関数も同様に、浮動小数点数の誤差によって正しい結果を返さない場合があります。例えば、以下のコードを考えてみましょう。

#include <stdio.h>
#include <math.h>

int main() {
    double x = 1.0000000000000001;
    printf("%.20f\n", ceil(x));
    return 0;
}

このコードでは、変数xに1.0000000000000001を代入しています。この値は、10進数で表現すると1.000000000000001となりますが、C言語では2進数で表現されるため、実際には1.0000000000000011101111100110101001010100011110101110…という値が格納されます。

そして、ceil関数を使ってxを切り上げて2にしようとしています。

ですが、浮動小数点数の誤差の影響で、使用するコンパイラ・処理系よっては期待通りの結果が得られません。

1.00000000000000000000

本来なら切り上げられて2になるはずが、元の数値が「1」に丸められてしまっているため、ceil関数を使っても「2」ではなく「1」になってしまっています。

このような問題を回避するためには、「厳密な計算」を行う必要があります。

具体的には、「任意精度演算ライブラリ」や「固定小数点演算」などを使って計算する方法があります。

ただし、これらの方法は処理速度やメモリ使用量などの面でデメリットもあるため、状況に応じて適切な方法を選択する必要があります。

終わりに

以上で、C言語のceil関数について詳しく解説してきました。

ceil関数は、小数点以下を切り上げるために非常に便利な関数ですが、浮動小数点数の誤差に注意する必要があります。

プログラミング初心者の方でもわかりやすく解説してきたと思いますので、ぜひ参考にしてみてください。

目次