四捨五入

floatの値を、四捨五入したい場合、以下のaとbのどちらが正しいのだろうか?

float f;
...
int a = (int)floorf(f + 0.5f);	// -0.5は0となる
int b = (0 <= f) ? (int)(f + 0.5f) : (int)(f - 0.5f); // -0.5は-1となる

四捨五入の言葉の意味からするとbが正しいかもしれないけど。
数学的には、aの方が扱いやすいと思う。


なぜなら、{-1.5, -0.5, 0.5, 1.5} の配列を変換すると、
aの場合、{1, 0, 1, 2}
bの場合、{-2, -1, 1, 2}
となるから。


逆に、bの方が0を中心に対称となるので扱いやすい場合もあるのかな。
知らん。