この記事では、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関数
を使うことで簡単に実現できます。
それぞれの関数の特性を理解し、適切な場面で使い分けることが重要です。