`ts_rank` is returning a numeric/decimal/real that fails a "greater than" check
ts_rank_cd yields a real. If you cast this to double precision, the result becomes:
SET extra_float_digits = 3;

SELECT ts_rank_cd(to_tsvector('cat'), to_tsquery('cat'))::double precision;

     ts_rank_cd      
---------------------
 0.10000000149011612
(1 row)

That explains what you observe, because the real is cast to double precision if you compare it to a double precision number.
The solution is to explicitly cast 0.1 to real, so that real comparison is used:
SELECT ts_rank_cd(to_tsvector('cat'), to_tsquery('cat')) = 0.1::real;

 ?column? 
----------
 t
(1 row)