通常、range関数は整数の範囲を生成しますが、浮動小数点数も利用することで柔軟な範囲指定が可能となります。
浮動小数点数を利用したrangeの基本的な使い方
例えば、0から1まで0.1刻みで数値を生成する場合、次のようにrange関数を使います。
for i in range(0, 11): print(i / 10) ||, 実行結果: >|python| 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
浮動小数点数を利用したrangeの注意点
浮動小数点数を使った場合、丸め誤差が生じる可能性があるため、注意が必要です。
例えば、次のコードでは0.3を含めるはずですが、実際にはそのような結果にはなりません。
for i in range(0, 11): print(i / 3)
実行結果:
0.0 0.3333333333333333 0.6666666666666666 1.0 1.3333333333333333 1.6666666666666667 2.0 2.3333333333333335 2.6666666666666665 3.0 3.3333333333333335
浮動小数点数を利用したrangeの工夫
浮動小数点数を使ったrangeを用いる場合、丸め誤差を回避するために工夫が必要です。
例えば、次のようにDecimalモジュールを利用することで、正確な演算を行うことができます。
from decimal import Decimal for i in range(0, 31): print(Decimal(i) / Decimal(10))
実行結果:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3
このようにして、正確な浮動小数点数の範囲指定が可能となります。