Translate

2012年12月23日日曜日

最大整数関数の応用問題(2)

今度は実用的かもしれない問題です。

実数xを超えない最大の整数を[x]と表すことにする。

この関数を応用して、正の実数xを小数第一位から四捨五入する関数を作ってください。

「最大整数関数の応用問題」に[x]の計算例があるので、参考にしてみてください。

1 件のコメント:

  1. 問題の答えです。

    xの小数点以下が0.5以上か、0.5より小さいかを取り出すことを考えてみます。

    0 <= a < 0.5 <= b < 1とします。aとb両方を2倍してみると、

    0 <= 2a < 1 <= 2b < 2。これより、

    [2a] = 0, [2b] = 1 となります。

    つまり、1より小さく0以上のある数が、0.5以上ならば切り上げる、0.5より小さいならば切り捨てることを実行するには、2倍してから、床関数を施せばよいということが分かりました。

    f(x) = [2x]とおいておきます。

    試しに、x = p + r(p:負でない整数、0 <= r < 1)と整数部分と小数部分を分けて表しておき、f(x)を計算してみると、

    f(x) = [2p + 2r] = 2p + [2r] = 2p + f(r)

    これより、fによって、小数部分がきちんと四捨五入されていることが分かりました。しかし、整数部分が2倍されているので、整数部分を一つ引いておかないといけません。xの整数部分は、

    [x] = [p + r] = p + [r] = p

    であるから、[x]で表すことができるので、目的の関数をgとすると、

    g(x) = f(x) - [x] = 2p + f(r) - p = p + f(r)

    となり、g(x)を書き直すと、

    g(x) = [2x] - [x]

    となります。




    返信削除