x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;x \le -15271779.56896043755114078521728515625 \lor \neg \left(x \le 2055229012769866.5\right):\\
\;\;\;\;\mathsf{fma}\left(1, x, \left(x \cdot z\right) \cdot \left(y - 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x \cdot y, z, 1 \cdot \left(x - x \cdot z\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r566558 = x;
double r566559 = 1.0;
double r566560 = y;
double r566561 = r566559 - r566560;
double r566562 = z;
double r566563 = r566561 * r566562;
double r566564 = r566559 - r566563;
double r566565 = r566558 * r566564;
return r566565;
}
double f(double x, double y, double z) {
double r566566 = x;
double r566567 = -15271779.568960438;
bool r566568 = r566566 <= r566567;
double r566569 = 2055229012769866.5;
bool r566570 = r566566 <= r566569;
double r566571 = !r566570;
bool r566572 = r566568 || r566571;
double r566573 = 1.0;
double r566574 = z;
double r566575 = r566566 * r566574;
double r566576 = y;
double r566577 = r566576 - r566573;
double r566578 = r566575 * r566577;
double r566579 = fma(r566573, r566566, r566578);
double r566580 = r566566 * r566576;
double r566581 = r566566 - r566575;
double r566582 = r566573 * r566581;
double r566583 = fma(r566580, r566574, r566582);
double r566584 = r566572 ? r566579 : r566583;
return r566584;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if x < -15271779.568960438 or 2055229012769866.5 < x Initial program 0.1
rmApplied add-cube-cbrt1.3
Applied associate-*l*1.3
Taylor expanded around inf 0.1
Simplified0.1
if -15271779.568960438 < x < 2055229012769866.5Initial program 5.9
Taylor expanded around inf 5.9
Simplified0.1
Final simplification0.1
herbie shell --seed 2019209 +o rules:numerics
(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.618195973607049e50) (+ x (* (- 1 y) (* (- z) x))) (if (< (* x (- 1 (* (- 1 y) z))) 3.8922376496639029e134) (- (* (* x y) z) (- (* x z) x)) (+ x (* (- 1 y) (* (- z) x)))))
(* x (- 1 (* (- 1 y) z))))