IEEE 754 определяет NaN как число со всеми показательными битами, которые равны 1
, и ненулевое число в мантиссе.
Так что для числа с одинарной точностью вы ищете:
S E M
x 11111111 xxxxxx....xxx (with M != 0)
Java обрабатывает это так:
Double n = Double.longBitsToDouble(0x7ff8000000000000L); // default NaN
Double n2 = Double.longBitsToDouble(0x7ff8000000000100L); // also a NaN, but M != 0
System.out.println(n.isNaN()); // true
System.out.println(n2.isNaN()); // true
System.out.println(n2 != Double.doubleToLongBits(Double.NaN)); // true
Для суммирования вы можете использовать любой NaN, который вы хотите, который соответствует вышеупомянутым правилам (все биты 1 в экспоненте и мантиссе! = 0).