Порядок сортировки чисел с плавающей точкой.Float
объект Float
Ordering для Float.
Поведение операций сравнения, предоставляемых по умолчанию (неявным) порядком сортировки для Float изменилось в 2.10.0 и 2.13.0. До Scala 2.10.0, экземпляр Ordering использовал семантику, согласованную с java.lang.Float.compare.
Scala 2.10.0 изменил реализацию lt, equiv, min, и т.д., чтобы соответствовать спецификации IEEE 754, сохраняя при этом метод compare НЕ совместимым, создавая внутренне несогласованный экземпляр. Спецификация IEEE 754 предписывает 0.0F == -0.0F. Кроме того, она требует, чтобы все сравнения с Float.NaN возвращали false, поэтому 0.0F < Float.NaN, 0.0F > Float.NaN, и Float.NaN == Float.NaN все дают false, аналогично None в flatMap.
Признавая ограничение семантики IEEE 754 с точки зрения порядка сортировки, Scala 2.13.0 создало два экземпляра: Ordering.Float.IeeeOrdering, который сохраняет семантику IEEE 754 из Scala 2.12.x, и Ordering.Float.TotalOrdering, который возвращает семантику java.lang.Float.compare для всех операций. По умолчанию расширяет TotalOrdering.
List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).sorted // List(-Infinity, 0.0, 1.0, NaN)
List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).min // -Infinity
implicitly[Ordering[Float]].lt(0.0F, 0.0F / 0.0F) // true
{
import Ordering.Float.IeeeOrdering
List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).sorted // List(-Infinity, 0.0, 1.0, NaN)
List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).min // NaN
implicitly[Ordering[Float]].lt(0.0F, 0.0F / 0.0F) // false
}
| Суператрибуты | |
|---|---|
| Тип "self" |
Классы
Исходный код
объект IeeeOrdering extends IeeeOrdering
| Компаньон | класс |
|---|
Исходный код
Порядок сортировки для Floats, который согласуется со спецификациями IEEE, где это возможно.
lt,lteq,equiv,gteqиgtсогласованы с операциями сравнения примитивов дляFloats и возвращаютfalseпри вызове сNaN.minиmaxсогласованы сmath.minиmath.max, и возвращаютNaNпри вызове сNaNв качестве любого из аргументов.compareведет себя так же, как java.lang.Float.compare.
Поскольку поведение Floats, заданное спецификацией IEEE, не согласуется с полным порядком сортировки при работе с NaN, для Float определены два порядка сортировки: TotalOrdering, который согласуется с полным порядком сортировки, и IeeeOrdering, который согласуется по возможности со спецификацией IEEE и операциями с плавающей точкой, определенными в scala.math.
Этот порядок сортировки может быть предпочтительным для числовых контекстов.
| См. также | |
|---|---|
| Компаньон | объект |
Исходный код
объект TotalOrdering extends TotalOrdering
| Компаньон | класс |
|---|
Исходный код
Порядок сортировки для Floats, который представляет собой полностью согласованный полный порядок сортировки и рассматривает NaN как большее, чем все остальные значения Float ; он ведет себя так же, как java.lang.Float.compare.
Поскольку поведение Floats, заданное спецификацией IEEE, не согласуется с полным порядком сортировки при работе с NaN, для Float определены два порядка сортировки: 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$$Float$.html