前提・実現したいこと
小数点以下が0(10.0,25.0など)の型をint型にする方法はあるでしょうか.
下のプログラムでdistanceの値が整数値かどうか判定する際に
単なる小数点の切り捨て,切り上げでは正確に判定できません.
該当のソースコード
Python
1x1,y1,x2,y2 = map(int,input().split()) 2p = (x1 - x2)**2 3q = (y1 - y2)**2 4distance = math.sqrt(p+q)
例えば,(x1,y1,x2,y2) = (1,2,5,5)にするとdistance=5.0となり,type(distance)はfloatになります.int型に変更したいです.
浮動小数計算は常に誤差が出ます。
例えば、282699121084430561の二乗と8507113200の二乗の和は282699121084430689の二乗に等しいですがmath.sqrt(282699121084430561**2+8507113200**2)は小数点以下が0ではありません。
こういうのはどうしたいですか?
コメントありがとうございます.
私の用途ではそのような大きい数は扱わないので特に考慮していませんでした.
あと,math.sqrt(282699121084430561**2+8507113200**2)は小数点以下が0ではないとのことですが,私の環境では0になりました.
>>> import math
>>> "{:<20,.15f}".format(math.sqrt(282699121084430561**2+8507113200**2))
'282,699,121,084,430,688.000000000000000'.
何か勘違いしてたらすいません.
正確には、282699121084430689は282699121084430688とは合わないです、ですね。
表示桁数を指定して確認せずにいい加減なことを書いてしましました。
>>> "{:<20,.15f}".format(math.sqrt(282699121084430689**2))
'282,699,121,084,430,688.000000000000000'
桁数が多くて見落としてましたが確かに下一桁が変わってました.
二乗して√をとるときに誤差が出る可能性があるということですか,勉強になります.
回答1件
あなたの回答
tips
プレビュー