Spec-Zone.ru › Scala 3.2

Порядок сортировки чисел с плавающей точкой.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
}
Суператрибуты
класс Object
трайт Matchable
класс Any
Тип "self"
Float.type

Классы

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

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

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

Порядок сортировки для 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

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

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

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

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

Порядок сортировки для Floats, который представляет собой полностью согласованный полный порядок сортировки и рассматривает NaN как большее, чем все остальные значения Float ; он ведет себя так же, как java.lang.Float.compare.

Поскольку поведение Floats, заданное спецификацией IEEE, не согласуется с полным порядком сортировки при работе с NaN, для Float определены два порядка сортировки: 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$$Float$.html

Spec-Zone.ru

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