In Scala 2.10, is someDouble.isNaN expected to box? Running my code calling .isNaN through a decompiler, I still see telltale calls to double2Double in my code. Given the new AnyVal work in 2.10, I'd expect it to be no worse than java.lang.Double.isNaN(someDouble) at runtime with no spurious allocations. Am I missing something?
Unfortunately, isNaN is a method on java.lang.Double, and it is essential to have an implicit conversion to java.lang.Double, so the Scala RichDouble value class cannot reimplement isNaN to be fast, and when you use isNaN you box to java.lang.Double.
Since this leaves only slow or awkward ways to test for NaN, I define
implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
and then I can just use .nan to check.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With