special handling for floats: although -0.0 and 0.0 are different in bit representation, they are considered equal by both type.equality and IEEE standard, hence they should have the same hash. all NaNs are considered equal by type.equality (but not the IEEE standard), so the hash of any NaN is the hash of the "canonical" NaN.
special handling for floats:
although -0.0 and 0.0 are different in bit representation,
they are considered equal by both type.equality and IEEE
standard, hence they should have the same hash.
all NaNs are considered equal by type.equality (but not
the IEEE standard), so the hash of any NaN is the hash of
the "canonical" NaN.