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 IeeeOrdering extends IeeeOrdering
| Компаньон | класс |
|---|
Исходный код
Упорядочивание для 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.
Это упорядочение может быть предпочтительным для числовых контекстов.
| См. также | |
|---|---|
| Компаньон | объект |
Исходный код
object TotalOrdering extends TotalOrdering
| Компаньон | класс |
|---|
Исходный код
Упорядочение для Doubles, которое является полностью согласованным полным упорядочением, и обрабатывает NaN как большее, чем все остальные Double значения; оно ведет себя так же, как java.lang.Double.compare.
Поскольку поведение Doubles, определенное спецификацией IEEE, не согласуется с полным порядком при работе с NaN, для Double определены два порядка: TotalOrdering, который соответствует полному порядку, и IeeeOrdering, который максимально соответствует спецификации IEEE и операциям с плавающей точкой, определенным в scala.math.
Это упорядочение может быть предпочтительным для сортировки коллекций.
| См. также | |
|---|---|
| Компаньон | объект |
© 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