x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -3.5627093803727213 \cdot 10^{52} \lor \neg \left(z \le 56035482213991.219\right):\\
\;\;\;\;x \cdot 1 + \left(x \cdot z\right) \cdot \left(y - 1\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(1 + z \cdot y\right) + \left(-1\right) \cdot \left(x \cdot z\right)\\
\end{array}double f(double x, double y, double z) {
double r923495 = x;
double r923496 = 1.0;
double r923497 = y;
double r923498 = r923496 - r923497;
double r923499 = z;
double r923500 = r923498 * r923499;
double r923501 = r923496 - r923500;
double r923502 = r923495 * r923501;
return r923502;
}
double f(double x, double y, double z) {
double r923503 = z;
double r923504 = -3.5627093803727213e+52;
bool r923505 = r923503 <= r923504;
double r923506 = 56035482213991.22;
bool r923507 = r923503 <= r923506;
double r923508 = !r923507;
bool r923509 = r923505 || r923508;
double r923510 = x;
double r923511 = 1.0;
double r923512 = r923510 * r923511;
double r923513 = r923510 * r923503;
double r923514 = y;
double r923515 = r923514 - r923511;
double r923516 = r923513 * r923515;
double r923517 = r923512 + r923516;
double r923518 = r923503 * r923514;
double r923519 = r923511 + r923518;
double r923520 = r923510 * r923519;
double r923521 = -r923511;
double r923522 = r923521 * r923513;
double r923523 = r923520 + r923522;
double r923524 = r923509 ? r923517 : r923523;
return r923524;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if z < -3.5627093803727213e+52 or 56035482213991.22 < z Initial program 10.1
rmApplied sub-neg10.1
Applied distribute-lft-in10.1
Simplified0.1
if -3.5627093803727213e+52 < z < 56035482213991.22Initial program 0.1
rmApplied sub-neg0.1
Applied distribute-lft-in0.1
Simplified2.3
rmApplied sub-neg2.3
Applied distribute-rgt-in2.3
Applied associate-+r+2.3
Simplified0.1
Final simplification0.1
herbie shell --seed 2020047
(FPCore (x y z)
:name "Data.Colour.RGBSpace.HSV:hsv from colour-2.3.3, J"
:precision binary64
:herbie-target
(if (< (* x (- 1 (* (- 1 y) z))) -1.618195973607049e+50) (+ x (* (- 1 y) (* (- z) x))) (if (< (* x (- 1 (* (- 1 y) z))) 3.892237649663903e+134) (- (* (* x y) z) (- (* x z) x)) (+ x (* (- 1 y) (* (- z) x)))))
(* x (- 1 (* (- 1 y) z))))