x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;x \le -2.600969880228342920976272849628587488737 \cdot 10^{-53} \lor \neg \left(x \le 3.769791437536624736866992851934661493425 \cdot 10^{-38}\right):\\
\;\;\;\;\mathsf{fma}\left(z, y - 1, 1\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;1 \cdot x + \left(\left(-z \cdot \left(1 \cdot x\right)\right) + z \cdot \left(y \cdot x\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r1205319 = x;
double r1205320 = 1.0;
double r1205321 = y;
double r1205322 = r1205320 - r1205321;
double r1205323 = z;
double r1205324 = r1205322 * r1205323;
double r1205325 = r1205320 - r1205324;
double r1205326 = r1205319 * r1205325;
return r1205326;
}
double f(double x, double y, double z) {
double r1205327 = x;
double r1205328 = -2.600969880228343e-53;
bool r1205329 = r1205327 <= r1205328;
double r1205330 = 3.7697914375366247e-38;
bool r1205331 = r1205327 <= r1205330;
double r1205332 = !r1205331;
bool r1205333 = r1205329 || r1205332;
double r1205334 = z;
double r1205335 = y;
double r1205336 = 1.0;
double r1205337 = r1205335 - r1205336;
double r1205338 = fma(r1205334, r1205337, r1205336);
double r1205339 = r1205338 * r1205327;
double r1205340 = r1205336 * r1205327;
double r1205341 = r1205334 * r1205340;
double r1205342 = -r1205341;
double r1205343 = r1205335 * r1205327;
double r1205344 = r1205334 * r1205343;
double r1205345 = r1205342 + r1205344;
double r1205346 = r1205340 + r1205345;
double r1205347 = r1205333 ? r1205339 : r1205346;
return r1205347;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if x < -2.600969880228343e-53 or 3.7697914375366247e-38 < x Initial program 0.3
Simplified0.3
if -2.600969880228343e-53 < x < 3.7697914375366247e-38Initial program 6.9
Simplified6.9
rmApplied fma-udef6.9
Applied distribute-lft-in6.9
Simplified2.9
Simplified2.9
rmApplied sub-neg2.9
Applied distribute-lft-in2.9
Simplified0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019196 +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))))