なにかこう、もっと単純明快なやり方があるような気がします。
もしあれば、教えてください
// x を偶数に切り下げる
float even_floor(float x) {
// 整数に切り下げる
int a = (int)floorf(x);
// 奇数なら -1 する
if (a >= 0) {
if (a % 2 == 0) a--;
} else {
if (-a % 2 == 0) a--;
}
// 終了
assert(a % 2 == 0);
return (float)a;
}
// x を偶数に切り上げる
float even_ceil(float x) {
// 整数に切り上げる
int a = (int)ceilf(x);
// 奇数なら +1 する
if (a >= 0) {
if (a % 2 == 0) a++;
} else {
if (-a % 2 == 0) a++;
}
// 終了
assert(a % 2 == 0);
return (float)a;
}