x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -29706158508458240 \lor \neg \left(z \le 2.646668377626094194071257532149127333909 \cdot 10^{-8}\right):\\
\;\;\;\;\mathsf{fma}\left(x, 1, \left(x \cdot z\right) \cdot \left(y - 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y - 1, z, 1\right) \cdot x\\
\end{array}double f(double x, double y, double z) {
double r745284 = x;
double r745285 = 1.0;
double r745286 = y;
double r745287 = r745285 - r745286;
double r745288 = z;
double r745289 = r745287 * r745288;
double r745290 = r745285 - r745289;
double r745291 = r745284 * r745290;
return r745291;
}
double f(double x, double y, double z) {
double r745292 = z;
double r745293 = -2.970615850845824e+16;
bool r745294 = r745292 <= r745293;
double r745295 = 2.6466683776260942e-08;
bool r745296 = r745292 <= r745295;
double r745297 = !r745296;
bool r745298 = r745294 || r745297;
double r745299 = x;
double r745300 = 1.0;
double r745301 = r745299 * r745292;
double r745302 = y;
double r745303 = r745302 - r745300;
double r745304 = r745301 * r745303;
double r745305 = fma(r745299, r745300, r745304);
double r745306 = fma(r745303, r745292, r745300);
double r745307 = r745306 * r745299;
double r745308 = r745298 ? r745305 : r745307;
return r745308;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -2.970615850845824e+16 or 2.6466683776260942e-08 < z Initial program 8.2
Simplified8.2
rmApplied add-cube-cbrt9.4
Applied associate-*r*9.4
Taylor expanded around inf 8.2
Simplified0.1
if -2.970615850845824e+16 < z < 2.6466683776260942e-08Initial program 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019353 +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.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))))