hashValue tries to hash doubles as integers so that e.g. 2.0 (double) and 2 (integer) hash to the same value. This is important in order to keep the assumption v1 == v2 => hash(v1) == hash(v2).
We do it by simply casting doubles to integers and then hashing the integers. Unfortunately, ubsan is unhappy about casting weird values not representable as integers (i.e. NaN, Inf, too big).
The fix is obvious.