LoginSignup
0
0

More than 3 years have passed since last update.

お前らの四捨五入は間違っている~0.5を足している人へ~

Last updated at Posted at 2020-06-08

四捨五入をしていてふと詰まったことがあったので共有する。

結論だけ言うとちゃんとどこの言語にでもありそうなroundを使おうと言う話。(これも正確な四捨五入ではなく銀行丸めと言うものな場合もある)

私はC言語で四捨五入する時に以下のようなコードを書いていた。

float x=1.6;
int round_x = x + 0.5;

int型へのキャストでは少数部分が切り捨てられるのでさきに0.5を足しておくことで切り捨てが四捨五入に早変わりすると言うもの。
1.51の場合
1.51+0.5=2.01なので2.01の小数点以下を切り捨てるとちゃんと1.51の四捨五入である2になっている。
1.49の場合
1.49+0.5=1.99なので1.99の小数点以下を切り捨てるとちゃんと1.49の四捨五入にである1なっている。

今までこのコードに疑問など抱いたことはなかった。(intやfloatの精度が足りる限り)
しかし、このコードには問題がある。

負の数の時には0.5を足してはいけない

先ほどのコードで-2.3を四捨五入することを考えてみよう。
答えは-2になるべきであるが。
-2.3+0.5=-1.8
小数点を切り捨てると-1となってしまうのである。

知っている人にとっては当たり前の話かもしれないがこれに気づかずに1時間ほど詰まってしまった

ならばどうする?

四捨五入する対象が負の時には+0.5ではなく-0.5しなければならない。
少しめんどくさいので諦めてround関数を使ったほうが早いだろう。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0