x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right) \le -1.0085285988747638 \cdot 10^{148} \lor \neg \left(x \cdot \left(1 - \left(1 - y\right) \cdot z\right) \le 5.2909404280952141 \cdot 10^{50}\right):\\
\;\;\;\;x \cdot 1 + \left(x \cdot z\right) \cdot \left(y - 1\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right)\\
\end{array}double f(double x, double y, double z) {
double r818415 = x;
double r818416 = 1.0;
double r818417 = y;
double r818418 = r818416 - r818417;
double r818419 = z;
double r818420 = r818418 * r818419;
double r818421 = r818416 - r818420;
double r818422 = r818415 * r818421;
return r818422;
}
double f(double x, double y, double z) {
double r818423 = x;
double r818424 = 1.0;
double r818425 = y;
double r818426 = r818424 - r818425;
double r818427 = z;
double r818428 = r818426 * r818427;
double r818429 = r818424 - r818428;
double r818430 = r818423 * r818429;
double r818431 = -1.0085285988747638e+148;
bool r818432 = r818430 <= r818431;
double r818433 = 5.290940428095214e+50;
bool r818434 = r818430 <= r818433;
double r818435 = !r818434;
bool r818436 = r818432 || r818435;
double r818437 = r818423 * r818424;
double r818438 = r818423 * r818427;
double r818439 = r818425 - r818424;
double r818440 = r818438 * r818439;
double r818441 = r818437 + r818440;
double r818442 = r818436 ? r818441 : r818430;
return r818442;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if (* x (- 1.0 (* (- 1.0 y) z))) < -1.0085285988747638e+148 or 5.290940428095214e+50 < (* x (- 1.0 (* (- 1.0 y) z))) Initial program 8.0
rmApplied sub-neg8.0
Applied distribute-lft-in8.0
Simplified0.1
if -1.0085285988747638e+148 < (* x (- 1.0 (* (- 1.0 y) z))) < 5.290940428095214e+50Initial program 0.1
Final simplification0.1
herbie shell --seed 2020081
(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))))