3) make do the comparison only after converting the lower precision nan to the higher precision nan first.
#3 makes the most sense to me because given that nan payloads are expected to be propagated through operations, R7RS requires the result of a computation to represent at least the highest precision among its arguments, so:
(+ special-nan.f 1.0d0) ==> special-nan.d
...where special-nan.d is whatever the platform would have done to convert special-nan.f from single to double-precision.
So, when someone wants to propagate a special nan (for example "NA" in the R system) through a computation and check for that , they can do:
(nan= result NA)
..and it will return true, even if the computation resulted in a promotion to higher precision.