1. ホーム
  2. パイソン

[解決済み】pythonでfloatをintegerに変換する最も安全な方法?

2022-04-06 14:11:09

質問

Pythonのmathモジュールには、次のような便利な関数があります。 floor を追加しました。 ceil . これらの関数は浮動小数点数を受け取り、その下または上にある最も近い整数を返します。しかし,これらの関数は答えを浮動小数点数として返します。例えば

import math
f=math.floor(2.3)

現在 f が返されます。

2.0

丸め誤差を発生させずに(例えばfloatが1.99999の場合)、floatから整数を取り出す最も安全な方法は何でしょうか、あるいは全く別の関数を使うべきでしょうか?

どのように解決するのですか?

浮動小数点数で表現できる整数はすべて厳密な表現を持っています。だから、安全に int を実行します。非正確な表現は、分母が2の累乗でない有理数を表現しようとした場合のみ発生します。

これがうまくいくのは、まったく些細なことではないのです。IEEE浮動小数点演算の特性として、問題の数値の大きさが十分に小さければ、int∘floor = ⌋となりますが、 int(floor(2.3)) が 1 になるかもしれない、異なる表現が可能です。

引用元 ウィキペディア ,

絶対値が2以下の任意の整数 24 は単精度フォーマットで正確に表現でき,絶対値が2以下の整数は 53 は倍精度フォーマットで正確に表現できる。