Spec-Zone.ru › Scala 3.1

Объект scala.math.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.1.1/scala/math/Ordering$$Float$.html

Spec-Zone.ru

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