丸め演算と整数型へのキャスト

切り捨て、切り上げ、四捨五入、いずれの丸め演算の場合でも、その結果は小数点以下を持たない値になります。

そういう値を整数型に変換して扱いたい、というのがよくあるので、丸め演算と整数型へのキャストを同時に行う関数を書きました。

#include <boost/detail/lightweight_test.hpp>
#include <shand/round.hpp>

int main()
{
    {
        const int x = shand::round_to<int>(1.4);
        BOOST_TEST(x == 1);

        const int y = shand::round_to<int>(1.5);
        BOOST_TEST(y == 2);
    }
    {
        const int x = shand::round_even_to<int>(1.5);
        BOOST_TEST(x == 2);

        const int y = shand::round_even_to<int>(2.5);
        BOOST_TEST(y == 2);

        BOOST_TEST(shand::round_even_to<int>(-1.5) == -2);
        BOOST_TEST(shand::round_even_to<int>(-1.7) == -2);
    }
    {
        const int x = shand::ceil_to<int>(1.4);
        BOOST_TEST(x == 2);
    }
    {
        const int x = shand::floor_to<int>(1.6);
        BOOST_TEST(x == 1);
    }
    return boost::report_errors();
}

round_to()は四捨五入、ceil_to()は切り上げ、floor_to()が切り下げです。テンプレート引数で、変換先の整数型を指定します。これらは、標準ライブラリにある丸め関数のラッパーです。

std::round()round_to()が四捨五入なので、最近接偶数への丸めを行うround_even_to()関数も用意してあります。



宣伝: 『プログラミングの魔導書 Vol.3』 予約受付中です。
http://longgate.co.jp/books/grimoire-vol3.html