Weil Unions nicht dafür gemacht sind, "a" reinzustecken und "b" rauszuholen.
Naja auf jeden Fall funktioniert es.

Wenn du castest brauchst du auch keinen doppelten Speicher - und bei meiner Variante ebenfalls nicht
Deine Methode ist sicher am edelsten, aber zum Verstehen am schwersten.
Ein Nachteil ist aber auch, dass sie nicht mit float, sondern nur mit int, int32_t und so was funktioniert, weil float keine Bitoperationen zulässt.
Ich würde C_Classic diese Methode aber trotzdem empfehlen, solange er kein float hat.