x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -0.9563389629198734143145088637538719922304 \lor \neg \left(z \le 1.472434426290467325820368081688675754304 \cdot 10^{-9}\right):\\
\;\;\;\;x \cdot \left(1 - 1 \cdot z\right) + \left(x \cdot z\right) \cdot y\\
\mathbf{else}:\\
\;\;\;\;\left(-\left(z \cdot \left(1 - y\right)\right) \cdot x\right) + x \cdot 1\\
\end{array}double f(double x, double y, double z) {
double r641730 = x;
double r641731 = 1.0;
double r641732 = y;
double r641733 = r641731 - r641732;
double r641734 = z;
double r641735 = r641733 * r641734;
double r641736 = r641731 - r641735;
double r641737 = r641730 * r641736;
return r641737;
}
double f(double x, double y, double z) {
double r641738 = z;
double r641739 = -0.9563389629198734;
bool r641740 = r641738 <= r641739;
double r641741 = 1.4724344262904673e-09;
bool r641742 = r641738 <= r641741;
double r641743 = !r641742;
bool r641744 = r641740 || r641743;
double r641745 = x;
double r641746 = 1.0;
double r641747 = r641746 * r641738;
double r641748 = r641746 - r641747;
double r641749 = r641745 * r641748;
double r641750 = r641745 * r641738;
double r641751 = y;
double r641752 = r641750 * r641751;
double r641753 = r641749 + r641752;
double r641754 = r641746 - r641751;
double r641755 = r641738 * r641754;
double r641756 = r641755 * r641745;
double r641757 = -r641756;
double r641758 = r641745 * r641746;
double r641759 = r641757 + r641758;
double r641760 = r641744 ? r641753 : r641759;
return r641760;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if z < -0.9563389629198734 or 1.4724344262904673e-09 < z Initial program 7.7
rmApplied sub-neg7.7
Applied distribute-lft-in7.7
Simplified7.7
rmApplied distribute-rgt-neg-out7.7
Simplified0.1
rmApplied sub-neg0.1
Applied distribute-lft-in0.1
Applied distribute-neg-in0.1
Applied associate-+r+0.1
Simplified0.1
if -0.9563389629198734 < z < 1.4724344262904673e-09Initial program 0.1
rmApplied sub-neg0.1
Applied distribute-lft-in0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019194
(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))))