I think xor is good. Depending on the binary representation shouldn't be a problem, since the hash value quite clearly isn't usable outside even the process instance:
/.../ *! The hash will be the same for the same value in the running *! process only (the memory address is typically used as the basis *! for the hash value). /.../
It will de facto become less stable for floats though, but I'd say that it's fairly unlikely there's any code out there that depends on that. I'd probably not even bother with #pike 7.8 compat goo.
I too believe that hashing close numbers to the same value would be a weakness rather than a strength. Hash values are not for sorting, rather the opposite.