Spec-Zone.ru › Scala 3.1

Объект scala.math.Double

Исходный код

объект Double

Ordering для Double.

Поведение операций сравнения, предоставляемых по умолчанию (неявным) упорядочением для Double, изменилось в 2.10.0 и 2.13.0. До Scala 2.10.0, экземпляр Ordering использовал семантику, согласованную с java.lang.Double.compare.

Scala 2.10.0 изменил реализацию lt, equiv, min, и т. д., чтобы они соответствовали стандарту IEEE 754, сохраняя при этом метод compare НЕсовместимым, создавая внутренне несовместимый экземпляр. Стандарт IEEE 754 определяет, что 0.0 == -0.0. Кроме того, он требует, чтобы все сравнения с Double.NaN возвращали false, таким образом 0.0 < Double.NaN, 0.0 > Double.NaN, и Double.NaN == Double.NaN все дают false, аналогично None в flatMap.

Признавая ограничение семантики IEEE 754 с точки зрения упорядочения, Scala 2.13.0 создал два экземпляра: Ordering.Double.IeeeOrdering, который сохраняет семантику IEEE 754 из Scala 2.12.x, и Ordering.Double.TotalOrdering, который возвращает семантику java.lang.Double.compare для всех операций. По умолчанию расширяет TotalOrdering.

List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).sorted      // List(-Infinity, 0.0, 1.0, NaN)
List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).min         // -Infinity
implicitly[Ordering[Double]].lt(0.0, 0.0 / 0.0)   // true
{
  import Ordering.Double.IeeeOrdering
  List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).sorted    // List(-Infinity, 0.0, 1.0, NaN)
  List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).min       // NaN
  implicitly[Ordering[Double]].lt(0.0, 0.0 / 0.0) // false
}
Наследуемые типы
класс Object
трейт Matchable
класс Any
Тип `self`
Double.type

Классы

Исходный код
объект IeeeOrdering extends IeeeOrdering

Компаньон класс

Исходный код
трейт IeeeOrdering extends Ordering[Double]

Упорядочение для Doubles, которое соответствует спецификациям IEEE, где это возможно.

  • lt, lteq, equiv, gteq и gt согласуются с операциями сравнения примитивов для Doubles и возвращают false при вызове с NaN.

  • min и max согласуются с math.min и math.max, и возвращают NaN при вызове с NaN в качестве любого аргумента.

  • compare ведет себя так же, как java.lang.Double.compare.

Поскольку поведение Doubles, определенное в IEEE, не соответствует полному упорядочению при работе с NaN, для Double определены два упорядочения: TotalOrdering, которое соответствует полному упорядочению, и IeeeOrdering, которое максимально соответствует спецификации IEEE и операциям с плавающей точкой, определенным в scala.math.

Это упорядочение может быть предпочтительнее в числовых контекстах.

См. также

TotalOrdering

Компаньон объект

Исходный код
объект TotalOrdering extends TotalOrdering

Компаньон класс

Исходный код
трейт TotalOrdering extends Ordering[Double]

Упорядочение для Doubles, которое представляет собой полное согласованное упорядочение и рассматривает NaN как большее, чем все остальные Double значения; оно ведет себя так же, как java.lang.Double.compare.

Поскольку поведение Doubles, определенное в IEEE, не соответствует полному упорядочению при работе с NaN, для Double определены два упорядочения: TotalOrdering, которое соответствует полному упорядочению, и IeeeOrdering, которое максимально соответствует спецификации IEEE и операциям с плавающей точкой, определенным в scala.math.

Это упорядочение может быть предпочтительнее для сортировки коллекций.

См. также

IeeeOrdering

Компаньон объект

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/math/Ordering$$Double$.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API