x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;y \le -2.66140484112631331502718790303648000995 \cdot 10^{259}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(z, y - 1, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x \cdot z, y - 1, x \cdot 1\right)\\
\end{array}double f(double x, double y, double z) {
double r30404862 = x;
double r30404863 = 1.0;
double r30404864 = y;
double r30404865 = r30404863 - r30404864;
double r30404866 = z;
double r30404867 = r30404865 * r30404866;
double r30404868 = r30404863 - r30404867;
double r30404869 = r30404862 * r30404868;
return r30404869;
}
double f(double x, double y, double z) {
double r30404870 = y;
double r30404871 = -2.6614048411263133e+259;
bool r30404872 = r30404870 <= r30404871;
double r30404873 = x;
double r30404874 = z;
double r30404875 = 1.0;
double r30404876 = r30404870 - r30404875;
double r30404877 = fma(r30404874, r30404876, r30404875);
double r30404878 = r30404873 * r30404877;
double r30404879 = r30404873 * r30404874;
double r30404880 = r30404873 * r30404875;
double r30404881 = fma(r30404879, r30404876, r30404880);
double r30404882 = r30404872 ? r30404878 : r30404881;
return r30404882;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.8 |
|---|---|
| Target | 0.2 |
| Herbie | 1.8 |
if y < -2.6614048411263133e+259Initial program 16.6
Simplified16.6
if -2.6614048411263133e+259 < y Initial program 3.4
Simplified3.4
rmApplied add-cube-cbrt4.0
Taylor expanded around inf 3.4
Simplified1.3
Final simplification1.8
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z)
:name "Data.Colour.RGBSpace.HSV:hsv from colour-2.3.3, J"
:herbie-target
(if (< (* x (- 1.0 (* (- 1.0 y) z))) -1.618195973607049e+50) (+ x (* (- 1.0 y) (* (- z) x))) (if (< (* x (- 1.0 (* (- 1.0 y) z))) 3.892237649663903e+134) (- (* (* x y) z) (- (* x z) x)) (+ x (* (- 1.0 y) (* (- z) x)))))
(* x (- 1.0 (* (- 1.0 y) z))))