プロが教えるわが家の防犯対策術!

log2(10を底とする2の対数)の近似値を四則演算のみで計算する方法を教えてください。

ただし、微積分の知識は使わないものとします。
例えば、ln(1+x)の級数展開は使用せずに計算してください。

A 回答 (2件)

どの程度の精度を求めるかによりますが、一例を示すと、



2^3<10 より、log2<1/3
10^2<2^7 より、2/7<log2
ここまでで、0.28、より大きく、0.34 より小さい事がわかります。

後は、もっと精度が必要なら、
10^3<2^10 や 2^13<10^4 から、0.3<log2<0.308
となります。

このように桁数を上げていけば、もっと精度が上がるはずですので、気合を入れて計算してみてください。
    • good
    • 0

四則演算のみでは困難ので、計算機と、そのルート機能は使うことにします。


それと対数の基本的な計算法則は既知とします。

まず次のような数値表を作っておきます。
x=
10
10^(1/2)=3.16227766
10^(1/4)=1.778279409
10^(1/8)=1.333521431
・・・
10^(1/4096)=1.000562311
10^(1/8192)=1.000281115
に対して、
log10 x=
1
1/2=0.5
1/4=0.25
1/8=0.125
・・・
1/4096=0.00024414
1/8192=0.00012207

次に、2の平方根をどんどん計算していくと、
2^(1/2048)=1.000338507
となって、
10^(1/4096)=1.000562311と10^(1/8192)=1.000281115
の間に入っていることがわかる。
(10^(1/8192)<2^(1/2048)<10^(1/4096))
これより、1/8192<log10 2^(1/2048)<1/4096、
すなわち、0.00012207<log10 2^(1/2048)<0.00024414
この区間は微小なので、この区間でlog10 xはほぼ直線として近似する。
すると、比例関係から、
(log10 2^(1/2048)-0.00012207)/(0.00024414-0.00012207)
=(1.000338507-1.000281115)/(1.000562311-1.000281115)
これより、
log10 2^(1/2048)=0.000146969
log10 2=2048×0.000146969=0.300992512
となって、大体0.301くらいまではわかります。
もっと近似精度を高めたければ、さらに先のべき乗の数値表を作って
調べればよいです。
17世紀初頭にネイピアの仲間のブリッグズという人が常用対数表を作る
のに上記のような手法を使ったそうです。
平方根の計算(開平)を手計算でやったので、相当大変だったと思います。

この回答への補足

No.1の回答のように開平なしで計算できること
および開平計算そのものが近似値であることにより
この方法は不採用とします。

No.1の方法をベースに計算方法を一般化すると
2^2=4
2^4=16=1.6*10
2^8=2.56*10^2
2^16=6.5536*10^4
2^32=42.9496*10^8=4.29496*10^9
2^64=18.446*10^18=1.8446*10^19
2^128=3.402*10^38
2^256=11.57*10^76=1.157*10^77
2^512=1.340*10^154
2^1024=1.797*10^308
2^2048=3.231*10^616
2^4096=10.44*10^1232=1.044*10^1233
2^8192=1.090*10^2466

以上により
2466/8192=0.30102 < log2 < 2467/8192=0.30114
となり、No.2の方法より少ない手間で開平操作をすることなく
同程度の精度を得ることができます。

補足日時:2007/10/06 21:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!