Объект 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
}
| Наследуемые типы | |
|---|---|
| Тип `self` |
Классы
Исходный код
объект 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.
Это упорядочение может быть предпочтительнее в числовых контекстах.
| См. также | |
|---|---|
| Компаньон | объект |
Исходный код
объект 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.1.1/scala/math/Ordering$$Double$.html