x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;\left(1 - y\right) \cdot z \le -1.3495595828906216 \cdot 10^{192} \lor \neg \left(\left(1 - y\right) \cdot z \le 3.09952408847658801 \cdot 10^{180}\right):\\
\;\;\;\;x \cdot 1 + \left(x \cdot z\right) \cdot \left(y - 1\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot 1 + \left(x \cdot \left(z \cdot y\right) + \left(x \cdot z\right) \cdot \left(-1\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r765319 = x;
double r765320 = 1.0;
double r765321 = y;
double r765322 = r765320 - r765321;
double r765323 = z;
double r765324 = r765322 * r765323;
double r765325 = r765320 - r765324;
double r765326 = r765319 * r765325;
return r765326;
}
double f(double x, double y, double z) {
double r765327 = 1.0;
double r765328 = y;
double r765329 = r765327 - r765328;
double r765330 = z;
double r765331 = r765329 * r765330;
double r765332 = -1.3495595828906216e+192;
bool r765333 = r765331 <= r765332;
double r765334 = 3.099524088476588e+180;
bool r765335 = r765331 <= r765334;
double r765336 = !r765335;
bool r765337 = r765333 || r765336;
double r765338 = x;
double r765339 = r765338 * r765327;
double r765340 = r765338 * r765330;
double r765341 = r765328 - r765327;
double r765342 = r765340 * r765341;
double r765343 = r765339 + r765342;
double r765344 = r765330 * r765328;
double r765345 = r765338 * r765344;
double r765346 = -r765327;
double r765347 = r765340 * r765346;
double r765348 = r765345 + r765347;
double r765349 = r765339 + r765348;
double r765350 = r765337 ? r765343 : r765349;
return r765350;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if (* (- 1.0 y) z) < -1.3495595828906216e+192 or 3.099524088476588e+180 < (* (- 1.0 y) z) Initial program 16.5
rmApplied sub-neg16.5
Applied distribute-lft-in16.5
Simplified0.6
if -1.3495595828906216e+192 < (* (- 1.0 y) z) < 3.099524088476588e+180Initial program 0.1
rmApplied sub-neg0.1
Applied distribute-lft-in0.1
Simplified1.9
rmApplied sub-neg1.9
Applied distribute-lft-in1.9
Simplified0.1
Final simplification0.2
herbie shell --seed 2020062
(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))))