Hacker News new | ask | show | jobs
by emergie 1933 days ago
You inspired me to check java world.

  // 0.0d / 0      equals 0x7ff8000000000000 (NaN)
  // Math.sqrt(-1) equals 0xfff8000000000000 (NaN)
  // 0x0p+0d  is a funky way to specify 0x0000000000000000 (0)
  // -0x0p+0d is a funky way to specify 0x8000000000000000 (-0)
  // without 0xHEXp+NUMd my compiller optimizes "-0" literal to 0

  // 0 == -0    
  0x0p+0d == -0x0p+0d
    
  // hashCodes for 0 and -0 are different
  Double.hashCode(0x0p+0d) != Double.hashCode(-0x0p+0d)

  // hashCodes for different NaNs collapse to the same value
  Double.hashCode(0.0d / 0) == Double.hashCode(Math.sqrt(-1))
1 comments

So yeah, same issue that .Net had.

I can't find the original complaints about this (was back in early 2000s after all), but as I recall it someone was very surprised that something that compares as equality ended up two times in the hashmap, and that messed up their code bad.