C言語における割り算の、小数点以下を切り上げする方法について記載します。
小数点以下を四捨五入する場合については 「整数の割り算で小数点を四捨五入する」 を参照ください。
整数の切り上げ
C言語で割り算の切り上げを行いたい場合は以下のように書くことができます。
|
|
このコードは CodePublisher で生成しています
もうちょっとかっこいい式
上の式をもうちょっとかっこよく書いてみました。やっていることは同じです。
|
|
このコードは CodePublisher で生成しています
[2011.12.28] 上記の式が正しいことを、100000*100000回の試験にて確認しました。
ついでにマクロにしよう (2012.01.15追記)
上記の式を #define で仮引数付きマクロ _DIVUP() にしてみました。
_UNSAFE_DIVUPはゼロ割に対応していません。(vWaruがゼロだとヤバい)
|
|
このコードは CodePublisher で生成しています
[2012.01.15] 上記の式が正しいことを、100000*100000回の試験にて確認しました
[番外] ダメな例
ググるとよく見かけるダメな例です。
|
|
このコードは CodePublisher で生成しています
怪しいニオイがプンプンしていますが、一応検証してみました。
◆0~50までの割り算結果
1/11 = 0 (期待値は1) 1/12 = 0 (期待値は1) 1/13 = 0 (期待値は1) . . . 45/11 = 4 (期待値は5) 45/22 = 2 (期待値は3) . .
207個のダメなパターンがありました。doubleを使ったコスパが悪い式のくせに、ダメパターンもあるとは、、これ如何に。
要は、割り算結果の小数点桁が0.1未満になるとアウトです。0.9を足しても切り上げられないからです。
「じゃあ0.99999..を足すわ」、というアイディアは、、、まあ、、いいと思いますよ。どうでも。