Я столкнулся с странной проблемой при попытке суммировать список удвоений, которые содержатся в разных экземплярах, используя foldLeft
. При расследовании кажется, что даже при работе со списком простых удвоений проблема не устраняется:foldLeft в списке Doubles возвращает странное значение
val listOfDoubles = List(4.0, 100.0, 1.0, 0.6, 8.58, 80.0, 22.33, 179.99, 8.3, 59.0, 0.6)
listOfDoubles.foldLeft(0.0) ((elem, res) => res + elem) // gives 464.40000000000003 instead of 464.40
Что я здесь делаю неправильно?
Примечание:foldLeft
здесь необходимы, так как то, что я пытаюсь достичь, это сумма удваивается, содержащаяся в различных экземплярах case class SomeClass(value: Double)
, если, конечно, не существует другой способ пойти об этом.
http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples –
http://0.30000000000000004.com/ имеет большое объяснение из первопричиной этого (с несколькими примерами в Scala) – Hamish