x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -3.561444125271963536658058669094541099896 \cdot 10^{-94}:\\
\;\;\;\;1 \cdot x + z \cdot \left(y \cdot x - 1 \cdot x\right)\\
\mathbf{elif}\;z \le 2.811602231371343827384096539240095965801 \cdot 10^{71}:\\
\;\;\;\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot x + z \cdot \left(y \cdot x - 1 \cdot x\right)\\
\end{array}double f(double x, double y, double z) {
double r43843185 = x;
double r43843186 = 1.0;
double r43843187 = y;
double r43843188 = r43843186 - r43843187;
double r43843189 = z;
double r43843190 = r43843188 * r43843189;
double r43843191 = r43843186 - r43843190;
double r43843192 = r43843185 * r43843191;
return r43843192;
}
double f(double x, double y, double z) {
double r43843193 = z;
double r43843194 = -3.5614441252719635e-94;
bool r43843195 = r43843193 <= r43843194;
double r43843196 = 1.0;
double r43843197 = x;
double r43843198 = r43843196 * r43843197;
double r43843199 = y;
double r43843200 = r43843199 * r43843197;
double r43843201 = r43843200 - r43843198;
double r43843202 = r43843193 * r43843201;
double r43843203 = r43843198 + r43843202;
double r43843204 = 2.811602231371344e+71;
bool r43843205 = r43843193 <= r43843204;
double r43843206 = r43843196 - r43843199;
double r43843207 = r43843206 * r43843193;
double r43843208 = r43843196 - r43843207;
double r43843209 = r43843197 * r43843208;
double r43843210 = r43843205 ? r43843209 : r43843203;
double r43843211 = r43843195 ? r43843203 : r43843210;
return r43843211;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if z < -3.5614441252719635e-94 or 2.811602231371344e+71 < z Initial program 7.7
Taylor expanded around inf 7.7
Simplified0.5
if -3.5614441252719635e-94 < z < 2.811602231371344e+71Initial program 0.3
rmApplied *-commutative0.3
Final simplification0.4
herbie shell --seed 2019171
(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))))