06/03/10 00:06:04
符号付整数除算で四捨五入の処理について質問があります。
a÷b の結果を四捨五入して ret に取得する処理を以下のようにしました。
[バージョンA]
// 除数と被除数の符号チェック
if ((a ^ b) < 0) {
// a, bが異符号
// ret = (a / b) - (1 / 2)
ret = (2 * a - b) / (2 * b);
}
else {
// a, bが同符号
// ret = (a / b) + (1 / 2)
ret = (2 * a + b) / (2 * b)
}
この方法だと正の場合0.5→1、負の場合-0.5→-1となり
数値0に対して正負の結果が対称になります。
(続く・・・)