Tetsu27
@Tetsu27

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

numpy.arangeで思った数列が作成できません。

初めて質問を投稿させていただくため、分かりずらい表現がありましたらご指摘いただけると幸いです。

やりたいこと

3.0から4.35まで0.05刻みの等差数列を作りたいです。numpy.arangを使って数列を作ろうとしても、pythonの丸め誤差で誤った判定がされ4.35を超えた数列が作られてしまいます。

発生している問題・エラー

数列を表示するコード

for i in np.arange(3.0, 4.4, 0.05):
    print(i)

上コードの出力です。4.35で止まっていないことに悩んでいます。

3.0
3.05
3.0999999999999996
...
4.249999999999996
4.299999999999995
4.349999999999995
4.399999999999995

numpy.arangeのドキュメンテーションにも

arange(start, stop, step) Values are generated within the half-open interval [start, stop), with spacing between values given by step.

とあり、stopは含まない半区間で等差数列を作成するとありました。しかし、恐らく丸目誤差で4.399999999999995は4.4を超えていないと判定されてしまっています。この問題はどのように解決すればいいでしょうか。

自分で試したこと

for i in np.arange(3.0, 4.4, 0.05):
    if i>4.35:
        break
    print(i)

このように自分で恣意的にbreakさせれば思った挙動をするのですが、他の工夫で解決できるでしょうか。ご教授いただきたいです。

0

1Answer

Comments

  1. @Tetsu27

    Questioner

    回答ありがとうございます。
    このように書くと丸目誤差出ないのですね。助かります。
    start, stop, stepにfloatを入れると丸目誤差で思った挙動をしないということですかね。

Your answer might help someone💌