x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;x \le -4.171186142257821738930075961762293489096 \cdot 10^{-22}:\\
\;\;\;\;\mathsf{fma}\left(z, y - 1, 1\right) \cdot x\\
\mathbf{elif}\;x \le 3.384200571349336964958405078165718304511 \cdot 10^{-78}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(z, \mathsf{fma}\left(-1, 1, 1\right), 1\right) + z \cdot \left(x \cdot \left(y - 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot x + \left(y - 1\right) \cdot \left(z \cdot x\right)\\
\end{array}double f(double x, double y, double z) {
double r34171105 = x;
double r34171106 = 1.0;
double r34171107 = y;
double r34171108 = r34171106 - r34171107;
double r34171109 = z;
double r34171110 = r34171108 * r34171109;
double r34171111 = r34171106 - r34171110;
double r34171112 = r34171105 * r34171111;
return r34171112;
}
double f(double x, double y, double z) {
double r34171113 = x;
double r34171114 = -4.1711861422578217e-22;
bool r34171115 = r34171113 <= r34171114;
double r34171116 = z;
double r34171117 = y;
double r34171118 = 1.0;
double r34171119 = r34171117 - r34171118;
double r34171120 = fma(r34171116, r34171119, r34171118);
double r34171121 = r34171120 * r34171113;
double r34171122 = 3.384200571349337e-78;
bool r34171123 = r34171113 <= r34171122;
double r34171124 = -1.0;
double r34171125 = fma(r34171124, r34171118, r34171118);
double r34171126 = fma(r34171116, r34171125, r34171118);
double r34171127 = r34171113 * r34171126;
double r34171128 = r34171113 * r34171119;
double r34171129 = r34171116 * r34171128;
double r34171130 = r34171127 + r34171129;
double r34171131 = r34171118 * r34171113;
double r34171132 = r34171116 * r34171113;
double r34171133 = r34171119 * r34171132;
double r34171134 = r34171131 + r34171133;
double r34171135 = r34171123 ? r34171130 : r34171134;
double r34171136 = r34171115 ? r34171121 : r34171135;
return r34171136;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if x < -4.1711861422578217e-22Initial program 0.2
Simplified0.2
if -4.1711861422578217e-22 < x < 3.384200571349337e-78Initial program 6.9
Simplified6.9
rmApplied fma-udef6.9
Applied distribute-lft-in6.9
rmApplied associate-*r*3.0
rmApplied *-un-lft-identity3.0
Applied add-cube-cbrt3.4
Applied prod-diff3.4
Applied distribute-lft-in3.4
Applied associate-+l+3.4
Simplified3.4
rmApplied pow13.4
Applied pow13.4
Applied pow13.4
Applied pow-prod-down3.4
Applied pow-prod-down3.4
Simplified0.1
if 3.384200571349337e-78 < x Initial program 0.7
Simplified0.7
rmApplied fma-udef0.7
Applied distribute-lft-in0.7
rmApplied associate-*r*0.1
Final simplification0.1
herbie shell --seed 2019192 +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))))