Как сравнить значения с плавающей точкой в Scala?

Насколько я знаю, точное сравнение не имеет большого смысла для значений с плавающей точкой, поскольку то, что должно быть 0.0001, на самом деле может быть чем-то вроде 0.0001000...0001... Должен ли я реализовать свою собственную функцию сравнения для указания точности или существует общепринятая практика для этого?

Раньше я использовал следующее в C# (что, я подозреваю, все еще неправильно, поскольку значение Double может быть, вероятно, неспособно представлять 0. 0001 вообще, даже заданное как константа (как объяснил Майкл Боргвардт здесь)):

public static bool AlmostEquals(this double x, double y, double precision = 0.0001)
{
  if (precision < 0.0)
    throw new ArgumentException();

  return Math.Abs(x - y) <= precision;
}

Должен ли я сделать что-то подобное в Scala?

22
задан Community 23 May 2017 в 12:26
поделиться