範囲とステップを持つDoublesのコレクションを作成しようとしています。私はArray.iterate
メソッドを使用すると私はそのようなのような奇妙な浮動小数点エラーを取得:小さな一歩の小さな範囲は、このような不正確さを引き起こすことを奇妙に思えるスカラ反復と範囲の精度エラー
scala> Array.iterate[Double](0.0, 10)(0.1+)
res0: Array[Double] = Array(0.0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999)
。私はこれを行うことができる他の方法があることを認識しています(例えばArray.iterate[Int](0, 10)(1+).map(i => i.toDouble/10.0)
)が、組み込みの組み込みメソッドがあまりにもひどく機能することにはうんざりしています。これには理由があるのですか、それとも私はそれを間違ったやり方でやっていますか?
? REPLで '0.1 + 0.1 + 0.1'を実行しようとすると' 0.30000000000000004'となるでしょう – Tim