x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;x \le -5.3142458593744392 \cdot 10^{-53}:\\
\;\;\;\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right)\\
\mathbf{elif}\;x \le 1.00697876248989277 \cdot 10^{-168}:\\
\;\;\;\;\mathsf{fma}\left(x, 1, z \cdot \left(x \cdot \left(y - 1\right)\right) + \left(1 \cdot \left(x \cdot z\right)\right) \cdot 0\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 1, \left(x \cdot z\right) \cdot \left(y - 1\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r959405 = x;
double r959406 = 1.0;
double r959407 = y;
double r959408 = r959406 - r959407;
double r959409 = z;
double r959410 = r959408 * r959409;
double r959411 = r959406 - r959410;
double r959412 = r959405 * r959411;
return r959412;
}
double f(double x, double y, double z) {
double r959413 = x;
double r959414 = -5.314245859374439e-53;
bool r959415 = r959413 <= r959414;
double r959416 = 1.0;
double r959417 = y;
double r959418 = r959416 - r959417;
double r959419 = z;
double r959420 = r959418 * r959419;
double r959421 = r959416 - r959420;
double r959422 = r959413 * r959421;
double r959423 = 1.0069787624898928e-168;
bool r959424 = r959413 <= r959423;
double r959425 = r959417 - r959416;
double r959426 = r959413 * r959425;
double r959427 = r959419 * r959426;
double r959428 = r959413 * r959419;
double r959429 = r959416 * r959428;
double r959430 = 0.0;
double r959431 = r959429 * r959430;
double r959432 = r959427 + r959431;
double r959433 = fma(r959413, r959416, r959432);
double r959434 = r959428 * r959425;
double r959435 = fma(r959413, r959416, r959434);
double r959436 = r959424 ? r959433 : r959435;
double r959437 = r959415 ? r959422 : r959436;
return r959437;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if x < -5.314245859374439e-53Initial program 0.4
if -5.314245859374439e-53 < x < 1.0069787624898928e-168Initial program 6.7
rmApplied add-cube-cbrt6.9
Applied associate-*l*7.0
Taylor expanded around inf 6.7
Simplified3.4
rmApplied add-cube-cbrt3.4
Applied add-sqr-sqrt34.3
Applied prod-diff34.3
Applied distribute-lft-in34.3
Simplified0.1
Simplified0.1
if 1.0069787624898928e-168 < x Initial program 1.9
rmApplied add-cube-cbrt2.1
Applied associate-*l*2.1
Taylor expanded around inf 1.9
Simplified0.3
Final simplification0.3
herbie shell --seed 2020043 +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))))