色々やるであろうブログ

浪人してるので更新ほぼ停止中

〈pythonで遊ぼう〉程よい巨大数や小さい数を10の累乗で不等式評価

要約
普通に計算すればいいものをわざわざ長いコードを作って10の累乗で近似するだけの記事


python初心者による練習で作られたコードを紹介します。
すごいものではないので過度の期待は危険。
実用性はないと思います。このコードそのものに応用例なんてあるんでしょうか。
なんでもいいからpythonで何かを動かしてみたい!という方は使ってみてください。
     


pythonで任意の正の実数を10の累乗で不等式評価できるコードを作ってみました。
ただしあまりにも大きい数字だとオーバーフローしてしまいます。
小さすぎると0e+00になってしまいます。


コードはこちらになります。

x=1
y=  # =の右に任意の正の実数
while x < y:
    x *= 10
    if x >= y:
        print('{:.0e}'.format(x/10),'<','y','<','{:.0e}'.format(x))
while x > y:
    x *= 1/10
    if x <= y:
        print('{:.0e}'.format(x),'<','y','<','{:.0e}'.format(x*10))

一つ目のwhileはxがy以上になるまでひたすら10倍し続けるもので、二つ目は逆にxがy以下になるまでひたすら10で割り続けるものになっています。
すごく単純な構造ですが、whileとifが程よく放り込まれているので練習にはもってこいでした。
'{:.0e}'.format(x)←これで1e+〇=1*10^〇の形にしています。仕組みはよくわかりません。

y=777^77を代入してみます。

x=1
y=777**77
while x < y:
    x *= 10
    if x >= y:
        print('{:.0e}'.format(x/10),'<','y','<','{:.0e}'.format(x))
while x > y:
    x *= 1/10
    if x <= y:
        print('{:.0e}'.format(x),'<','y','<','{:.0e}'.format(x*10))

1e+222 < y < 1e+223 
1e+222 < y < 1e+223

777^77は10^222から10^223の間にあることがわかりました。
何故か2つ同じ不等式が出力されてますが気にしない気にしない。

次は小さい数字としてy=1/17^175を代入してみます。

 x=1
y=1/17**175
while x < y:
    x *= 10
    if x >= y:
        print('{:.0e}'.format(x/10),'<','y','<','{:.0e}'.format(x))
while x > y:
    x *= 1/10
    if x <= y:
        print('{:.0e}'.format(x),'<','y','<','{:.0e}'.format(x*10))
1e-216 < y < 1e-215

1/17^175は10^-216から10^-215の間にあることがわかります。
実際に計算してみると

print(1/17**175)        
4.692872540150196e-216

となるので出力された不等式は正しいことがわかります。
y=77**777は桁が多すぎるので割愛。

yは指数である必要はないので、階乗とかでもできます。