パズル、ゲーム、数学(算数?)などの好きなことを書き留めていきます。
問題の答えです。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]となります。
問題の答えです。
返信削除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]
となります。