Selaa lähdekoodia

LibM: optimized (branchless) copysign

Nick Wanninger 4 vuotta sitten
vanhempi
commit
c3f417aa1e
1 muutettua tiedostoa jossa 6 lisäystä ja 7 poistoa
  1. 6 7
      Userland/Libraries/LibM/math.cpp

+ 6 - 7
Userland/Libraries/LibM/math.cpp

@@ -745,12 +745,11 @@ long double nexttowardl(long double, long double) NOEXCEPT
 
 
 double copysign(double x, double y)
 double copysign(double x, double y)
 {
 {
-    if (x < 0 && y < 0)
-        return x;
-    if (x >= 0 && y < 0)
-        return -x;
-    if (x < 0 && y >= 0)
-        return -x;
-    return x;
+    using Extractor = FloatExtractor<decltype(x)>;
+    Extractor ex, ey;
+    ex.d = x;
+    ey.d = y;
+    ex.sign = ey.sign;
+    return ex.d;
 }
 }
 }
 }