I don't understand the first answer above at all, although I admit I am new to Kotlin.
I have no idea what "the erased floating point comparison" means, but I am assuming it means the decision that -0.0 != +0.0. I see it as an implementation decision, not an erasure.
I also don't understand at all what the last paragraph means. Changing the semantics of equality for a type based on whether it's statically determinable or not is absurd. I can't guess what Kotlin designers had in mind, but it can't possibly be like this; I'm just not understanding what's going on in that paragraph at all.
Also, violating IEEE numerics to allow floating map keys, or provide extra sentinel or flag or key values, is a bizarre priority inversion. That's what NaNs are for. Extraordinary violations of such a widely used standard require extraordinary motivation, and the first answer above seems to miss that boat.
Much better would be to use the underlying 32-, 64-, or 128-bit bitstrings as keys if you need to play such bizarre games. In 45 years of doing real-time numerical processing I have never even wanted to index a map with floats, although I actually can imagine it (but not changing a standard to accommodate such kludges).
Maybe I'm out to lunch, but there seems to be a serious disconnect here somewhere.