実現したいこと
以下のようなコードの場合の少数の処理をどのように行うべきか知りたいです。
発生している問題・エラーメッセージ
入力例
10
1 1 10
10
出力結果
#1.0 0.1
#1.0 0.2
#1.0 0.30000000000000004
#...
#10.0 9.99999999999998
USAGI
本来であればUSAGIのところに
DRAWを表示させたいのですが少数がずれていってしまうため出力が異なってしまいます。
この問題が浮動小数点数は、有限のビット数で実数を表現するため、厳密な値を表現することができないためであるということはなんとなく分かったのですが、実際にどのように少数の処理を行えばいいのか分からず困っています。
該当のソースコード
python
1G = int(input()) 2 3u,a,b = map(int,input().split()) 4 5k = int(input()) 6 7usagi = 0 8kame = 0 9 10usagi_kyori = 0 11usagi_rest = 0 12 13 14while True: 15 if usagi >= G and kame >= G: 16 print("DRAW") 17 break 18 elif usagi >= G > kame: 19 print("USAGI") 20 break 21 elif kame >= G > usagi: 22 print("KAME") 23 break 24 else: 25 26 kame += 1 / k 27 28 if usagi_rest == 0: 29 usagi += 1 / u 30 usagi_kyori += 1 / u 31 32 if a <= usagi_kyori: 33 usagi_rest = b 34 usagi_kyori = 0 35 else: 36 usagi_rest -= 1 37 38 print(usagi,kame) #今回起きている問題を明確にするための文です。(本来は不要)
試したこと
def my_round(val, digit=0):
p = 10 ** digit
return (val * p * 2 + 1) // 2 / p
こういった自作関数で処理しようとしたのですが、よく分からずうまくいきませんでした。
回答3件
あなたの回答
tips
プレビュー