【C言語】負数を切り捨てする方法を解説

この記事では、C言語で負数を切り捨てる方法について解説します。

floor関数trunc関数の使い方や、それぞれの違いを学びます。

また、自作関数を使った切り捨て方法や、他の丸め方法との組み合わせについても紹介します。

目次から探す

C言語における基本的な切り捨て方法

C言語では、数値を切り捨てるための関数がいくつか用意されています。

特に負数を切り捨てる場合、floor関数trunc関数がよく使われます。

これらの関数を使うことで、簡単に数値の切り捨てを行うことができます。

以下では、それぞれの関数の使い方について詳しく解説します。

floor関数の使用

math.hライブラリのインクルード

floor関数を使用するためには、まずmath.hライブラリをインクルードする必要があります。

math.hライブラリには数学的な関数が多数含まれており、floor関数もその一つです。

#include <math.h>

floor関数の基本的な使い方

floor関数は、引数として与えられた浮動小数点数を超えない最大の整数を返します。

特に負数の場合、floor関数は小数点以下を切り捨て、より小さい整数に丸めます。

以下に、floor関数を使用したサンプルコードを示します。

#include <stdio.h>
#include <math.h>
int main() {
    double num = -3.7;
    double result = floor(num);
    printf("floor(%f) = %f\n", num, result);
    return 0;
}

このコードを実行すると、以下のような結果が得られます。

floor(-3.700000) = -4.000000

このように、floor関数は-3.7を-4に切り捨てます。

trunc関数の使用

math.hライブラリのインクルード

trunc関数math.hライブラリに含まれているため、同様にインクルードが必要です。

#include <math.h>

trunc関数の基本的な使い方

trunc関数は、引数として与えられた浮動小数点数の小数部分を切り捨て、整数部分だけを返します。

floor関数とは異なり、trunc関数は数値の符号に関係なく小数部分を切り捨てます。

以下に、trunc関数を使用したサンプルコードを示します。

#include <stdio.h>
#include <math.h>
int main() {
    double num = -3.7;
    double result = trunc(num);
    printf("trunc(%f) = %f\n", num, result);
    return 0;
}

このコードを実行すると、以下のような結果が得られます。

trunc(-3.700000) = -3.000000

このように、trunc関数は-3.7を-3に切り捨てます。

floor関数trunc関数の違いを理解することで、目的に応じた適切な切り捨て方法を選択することができます。

負数の切り捨てにおける注意点

負数の切り捨てにおいては、いくつかの注意点があります。

特に、floor関数trunc関数の違いや、符号の扱い、整数型と浮動小数点型の違いについて理解しておくことが重要です。

floor関数とtrunc関数の違い

floor関数trunc関数はどちらも切り捨てを行う関数ですが、その動作には違いがあります。

  • floor関数は、引数として与えられた数値を「小さい方の整数」に切り捨てます。

つまり、負の数の場合はより小さい負の整数に切り捨てられます。

  • trunc関数は、引数として与えられた数値の小数部分を単純に切り捨てます。

つまり、負の数の場合でも0に近い方向に切り捨てられます。

以下に、floor関数trunc関数の違いを示すサンプルコードを示します。

#include <stdio.h>
#include <math.h>
int main() {
    double num1 = -3.7;
    double num2 = -3.7;
    printf("floor(-3.7) = %f\n", floor(num1)); // -4.000000
    printf("trunc(-3.7) = %f\n", trunc(num2)); // -3.000000
    return 0;
}

このコードを実行すると、floor関数は-3.7を-4に切り捨て、trunc関数は-3に切り捨てることがわかります。

負数の切り捨てにおける符号の扱い

負数の切り捨てにおいては、符号の扱いが重要です。

floor関数は常に「小さい方の整数」に切り捨てるため、負の数の場合はより小さい負の整数に切り捨てられます。

一方、trunc関数は符号に関係なく小数部分を切り捨てるため、負の数の場合でも0に近い方向に切り捨てられます。

以下に、符号の扱いに関するサンプルコードを示します。

#include <stdio.h>
#include <math.h>
int main() {
    double num1 = -2.3;
    double num2 = 2.3;
    printf("floor(-2.3) = %f\n", floor(num1)); // -3.000000
    printf("floor(2.3) = %f\n", floor(num2));  // 2.000000
    printf("trunc(-2.3) = %f\n", trunc(num1)); // -2.000000
    printf("trunc(2.3) = %f\n", trunc(num2));  // 2.000000
    return 0;
}

このコードを実行すると、floor関数は負の数をより小さい負の整数に切り捨て、正の数をより小さい正の整数に切り捨てることがわかります。

一方、trunc関数は符号に関係なく小数部分を切り捨てます。

整数型と浮動小数点型の違い

C言語では、整数型と浮動小数点型の違いも理解しておく必要があります。

整数型は小数部分を持たないため、切り捨ての概念が異なります。

浮動小数点型は小数部分を持つため、floor関数trunc関数を使用して小数部分を切り捨てることができます。

以下に、整数型と浮動小数点型の違いを示すサンプルコードを示します。

#include <stdio.h>
#include <math.h>
int main() {
    int int_num = -3;
    double float_num = -3.7;
    printf("整数型: %d\n", int_num); // -3
    printf("浮動小数点型 (floor): %f\n", floor(float_num)); // -4.000000
    printf("浮動小数点型 (trunc): %f\n", trunc(float_num)); // -3.000000
    return 0;
}

このコードを実行すると、整数型はそのままの値が表示され、浮動小数点型はfloor関数trunc関数を使用して小数部分が切り捨てられることがわかります。

以上のように、負数の切り捨てにおいてはfloor関数trunc関数の違いや符号の扱い、整数型と浮動小数点型の違いを理解しておくことが重要です。

これらの知識を活用して、適切な切り捨て処理を行いましょう。

応用例

自作関数での切り捨て

自作関数の実装方法

C言語では、標準ライブラリを使わずに自分で関数を作成して負数を切り捨てることも可能です。

以下に、自作関数を使って負数を切り捨てる方法を紹介します。

まず、負数を切り捨てる自作関数を実装します。

この関数は、引数として浮動小数点数を受け取り、その数値を切り捨てた結果を返します。

#include <stdio.h>
// 負数を切り捨てる自作関数
double custom_floor(double num) {
    if (num > 0) {
        return (int)num;
    } else {
        return (int)num - 1;
    }
}
int main() {
    double num = -3.7;
    printf("切り捨て前: %f\n", num);
    printf("切り捨て後: %f\n", custom_floor(num));
    return 0;
}

この関数では、引数が正の数の場合はそのまま整数部分を返し、負の数の場合は整数部分から1を引いた値を返します。

自作関数の使用例

上記の自作関数を使って、実際に負数を切り捨てる例を見てみましょう。

#include <stdio.h>
// 負数を切り捨てる自作関数
double custom_floor(double num) {
    if (num > 0) {
        return (int)num;
    } else {
        return (int)num - 1;
    }
}
int main() {
    double num1 = -3.7;
    double num2 = 2.5;
    double num3 = -0.2;
    printf("切り捨て前: %f, 切り捨て後: %f\n", num1, custom_floor(num1));
    printf("切り捨て前: %f, 切り捨て後: %f\n", num2, custom_floor(num2));
    printf("切り捨て前: %f, 切り捨て後: %f\n", num3, custom_floor(num3));
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

切り捨て前: -3.700000, 切り捨て後: -4.000000
切り捨て前: 2.500000, 切り捨て後: 2.000000
切り捨て前: -0.200000, 切り捨て後: -1.000000

他の丸め方法との組み合わせ

負数の切り捨て以外にも、C言語ではさまざまな丸め方法があります。

以下にいくつかの例を紹介します。

ceil関数の使用

ceil関数は、引数として与えられた数値を切り上げます。

math.hライブラリをインクルードして使用します。

#include <stdio.h>
#include <math.h>
int main() {
    double num = -3.7;
    printf("切り上げ前: %f\n", num);
    printf("切り上げ後: %f\n", ceil(num));
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

切り上げ前: -3.700000, 切り上げ後: -3.000000

round関数の使用

round関数は、引数として与えられた数値を四捨五入します。

math.hライブラリをインクルードして使用します。

#include <stdio.h>
#include <math.h>
int main() {
    double num = -3.7;
    printf("四捨五入前: %f\n", num);
    printf("四捨五入後: %f\n", round(num));
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

四捨五入前: -3.700000, 四捨五入後: -4.000000

これらの関数を組み合わせることで、さまざまな丸め方法を実現できます。

自分の用途に合わせて適切な関数を選びましょう。

まとめ

この記事では、C言語における負数の切り捨て方法について詳しく解説しました。

C言語における負数の切り捨て方法は、floor関数trunc関数を使うことで簡単に実現できます。

それぞれの関数の特性を理解し、適切な場面で使い分けることが重要です。

目次から探す