當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Scala Ordering.Double用法及代碼示例


用法:

object Double

Ordering s 為 Double s.

Double 上的默認(隱式)排序提供的比較操作的行為在 2.10.0 和 2.13.0 中發生了變化。在 Scala 2.10.0 之前,Ordering 實例使用與 java.lang.Double.compare 一致的語義。

Scala 2.10.0 更改了 ltequivmin 等的實現,使其符合 IEEE 754,同時保持 compare 方法不符合,創建了一個內部不一致的實例。 IEEE 754 指定 0.0 == -0.0 。此外,它要求與 Double.NaN 的所有比較都返回 false 因此 0.0 < Double.NaN0.0 > Double.NaNDouble.NaN == Double.NaN 都產生 false ,類似於 flatMap 中的 None

認識到 IEEE 754 語義在排序方麵的局限性,Scala 2.13.0 創建了兩個實例:Ordering.Double.IeeeOrdering,它保留了 Scala 2.12.x 的 IEEE 754 語義,和 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
}

源碼:

Ordering.scala

相關用法


注:本文由純淨天空篩選整理自scala-lang.org大神的英文原創作品 Ordering.Double。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。