0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

割り算の結果を任意の桁まで表示する

Posted at

やりたいこと

1÷3の答えは0.33333...だが、これを任意の桁まで表示したい。

やってみる

前提として、普通にprint()で出すと誤差が起きる。

>>> print(1/3)
0.3333333333333333

出力は16桁で止まっている。
これは、floatによる演算の正確性が保証されるのがだいたい16行目まで1であることに由来しており、これ以降は正確ではないということになる。

さて。

方針としては「一桁ずつ計算する」という方式をとる。
筆算を想像すればわかりやすいかも。

  1. 割る
  2. 答えを記録する
  3. あまりを10倍する
  4. 1へ

この繰り返しで計算していく。

n = 1 # 割られる数
m = 3 # 割る数
k = 10 # 小数部の桁
ans = [str(int(n//m)), ""] # 結果。[0]が整数部、[1]が小数部を保存する

stuck = n - m*int(n//m) # あまり
x = 0 # 割り算の結果(一桁のみ)

while len(ans[1]) < k:
    stuck *= 10
    x = stuck // m
    ans[1] += str(int(x))
    stuck -= m * int(x)
    
# 小数部が存在しない場合は0を差し込んでおく
if len(ans[1])==0:
    ans[1] += "0" * k

ところどころxintにキャストしているが、これは割り算の結果が必ずfloatで返されるため。

  1. 正確には15.95行までだったような気がする(53 * log10 2 =15.95)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?