数値を最も近い偶数に切り下げるように設計された関数があります。
double round(double d)
{
floor(d + 0.5);
if(d % 2 == 1)
{
d = d-1;
}
return d;
}
ただし、コードをコンパイルしようとすると、「式には整数型または列挙型が必要です」というエラーが返されます。エラーは、if ステートメントと同じ行から報告されます。
誰かが私を正しい方向に向けることができますか?
floor()
関数は double を返します。
double floor (double x);
int
またはのような「整数型」ではなく、浮動小数点型char
です。結果を四捨五入して破棄するfloor(d + 0.5);
whichを呼び出す代わりに、次のようなものが必要です。d
int i = static_cast<int>(floor(d + 0.5));
return floor(d/2 + 0.5) * 2;
もちろん、倍数は近似値です。10^50 の場合、おそらく偶数は得られません。
floor はその場では機能せず、floor-ed 値を返します。また、 % は整数に適用されるため、再利用できませんd
。あなたが望むものは:
int i = floor(d + 0.5);
if(i % 2 == 1)
{
i = i-1;
}
return i;