浮動小数点数を丸める1行だけのC関数の書き方
はじめに
C言語では、標準ライブラリの round() 関数に頼らなくても、たった1行のコードで浮動小数点数を四捨五入できる自作関数を書くことができます。本記事では、そのシンプルかつ効果的な実装方法を解説します。
丸め処理の基本的な考え方
この問題を解決するために、以下の手順に従います。
- 対象となる浮動小数点数を受け取る
- 数値が正の場合は 0.5 を加算する
- 数値が負の場合は 0.5 を減算する
- キャスト(型変換)によって浮動小数点値を整数に変換する
なぜこの方法が機能するのか
C言語において、float 型や double 型を int 型へキャストすると、小数部分はゼロ方向へ切り捨てられます。この性質を利用し、正の数であれば事前に 0.5 を足しておくことで、切り捨ての結果が四捨五入と同じになります。負の数についても同様に、あらかじめ 0.5 を引いておけば正しく丸めることができます。
サンプルコード
#include <stdio.h>
int my_round(float number) {
return (int)(number < 0 ? number - 0.5 : number + 0.5);
}
int main() {
printf("Rounding of (2.48): %d\n", my_round(2.48));
printf("Rounding of (-5.79): %d\n", my_round(-5.79));
return 0;
}
ポイントは三項演算子(条件演算子)を使っている点です。これにより、if 文による分岐を書かずとも、関数本体を1行にまとめることができます。
実行結果
Rounding of (2.48): 2
Rounding of (-5.79): -6
正の数 2.48 は 2 に丸められ、負の数 -5.79 は -6 に丸められており、期待どおりの動作をしていることが確認できます。
まとめ
三項演算子とキャストを組み合わせることで、1行の関数本体だけで浮動小数点数の四捨五入を実現できました。ただし、実務では標準ライブラリの round() 関数を使う方が安全です。また、ちょうど 0.5 の境界値の扱いや、int 型の範囲を超える大きな数値を扱う場合のオーバーフローにも注意が必要です。
-
C言語で浮動小数点数のセットビット数を数える方法を解説
この問題では、1つの浮動小数点数が与えられ、その2進表現におけるセットビット(1になっているビット)の数を求める必要があります。例えば、浮動小数点数が 0.15625 の場合、セットビットは6個になります。一般的なCコンパイラでは、単精度浮動小数点形式で数値が表現されるため、メモリ上では次のようなビット列として格納されます。考え方:ポインタとバイト単位での処理浮動小数点数をビット値に変換して調べるには、まず対象の数値をポインタ変数に渡し、そのポインタを char* 型にキャストします。こうすることで、float型のデータを1バイトずつ順番に処理できるようになり、各バイト(char型)ごとのセッ
-
ExcelのROUND関数で数値を丸める方法|四捨五入をわかりやすく解説
Excelで資料を見やすく整えたいとき、数値を小数点以下や整数単位で丸めると、ぐっと読みやすくなります。数値を丸めるということは、重要度の低い桁を取り除くことを意味します。その結果、必要な精度を保ちながら、より見栄えの良い値に仕上げることができます。 丸め処理は、概算を示したり、数値を扱いやすくしたりする目的でよく使われます。たとえば、割引率を計算して「17.3587563」という数値が出た場合、小数第1位で丸めれば「17.4%」となり、はるかに見やすくなります。この記事では、ROUND関数を使って数値を丸める方法を詳しくご紹介します。 ExcelのROUND関数とは ROUND関数は、Ex