Spec-Zone.ru › Scala 3.2

Object Ordering.Double

Исходный код

object 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
Тип себя
Double.type

Классы

Исходный код
object 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

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

Исходный код
object 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.2.0/scala/math/Ordering$$Double$.html

Spec-Zone.ru

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