Issue #15544: Fix Decimal.__float__ to work with payload-carrying NaNs.
diff --git a/Lib/decimal.py b/Lib/decimal.py
index f5277c5..49de535 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -1555,7 +1555,13 @@
 
     def __float__(self):
         """Float representation."""
-        return float(str(self))
+        if self._isnan():
+            if self.is_snan():
+                raise ValueError("Cannot convert signaling NaN to float")
+            s = "-nan" if self._sign else "nan"
+        else:
+            s = str(self)
+        return float(s)
 
     def __int__(self):
         """Converts self to an int, truncating if necessary."""