四捨五入
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を中心に対称となるので扱いやすい場合もあるのかな。
知らん。