Общее правило сравнения 64-битных чисел с плавающей запятой согласно IEEE 754 (не относится к Scala или даже к Java, см. NaN ):
double n1 = Double.NaN;
double n2 = Double.NaN;
System.out.println(n1 == n2); //false
Идеяявляется то, что NaN
является значением маркера для неизвестно или неопределено .Сравнение двух неизвестных значений должно всегда давать false
, поскольку они хорошо ... неизвестны.
Если вы хотите использовать сопоставление с шаблоном с NaN
, попробуйте это:
myDouble match {
case x if x.isNaN => ...
case _ => ...
}
Но я думаю, что для сопоставления с образцом будет использовано строгое двойное сравнение, поэтому будьте осторожны с этой конструкцией.