x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;y \le -1.771265856594219962128151511977091593235 \cdot 10^{280}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(z, y - 1, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 1, \left(x \cdot z\right) \cdot \left(y - 1\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r33524096 = x;
double r33524097 = 1.0;
double r33524098 = y;
double r33524099 = r33524097 - r33524098;
double r33524100 = z;
double r33524101 = r33524099 * r33524100;
double r33524102 = r33524097 - r33524101;
double r33524103 = r33524096 * r33524102;
return r33524103;
}
double f(double x, double y, double z) {
double r33524104 = y;
double r33524105 = -1.77126585659422e+280;
bool r33524106 = r33524104 <= r33524105;
double r33524107 = x;
double r33524108 = z;
double r33524109 = 1.0;
double r33524110 = r33524104 - r33524109;
double r33524111 = fma(r33524108, r33524110, r33524109);
double r33524112 = r33524107 * r33524111;
double r33524113 = r33524107 * r33524108;
double r33524114 = r33524113 * r33524110;
double r33524115 = fma(r33524107, r33524109, r33524114);
double r33524116 = r33524106 ? r33524112 : r33524115;
return r33524116;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.8 |
|---|---|
| Target | 0.2 |
| Herbie | 1.7 |
if y < -1.77126585659422e+280Initial program 16.0
Simplified16.0
if -1.77126585659422e+280 < y Initial program 3.6
Simplified3.6
rmApplied add-cube-cbrt4.1
rmApplied add-cube-cbrt4.9
Applied associate-*l*4.9
Simplified4.8
Taylor expanded around inf 3.6
Simplified1.4
Final simplification1.7
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))))