x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;1 - \left(1 - y\right) \cdot z \le -2.3842446993784196 \cdot 10^{131} \lor \neg \left(1 - \left(1 - y\right) \cdot z \le 6.0335465209293531 \cdot 10^{306}\right):\\
\;\;\;\;x \cdot 1 + \left(x \cdot z\right) \cdot \left(y - 1\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right)\\
\end{array}double f(double x, double y, double z) {
double r967205 = x;
double r967206 = 1.0;
double r967207 = y;
double r967208 = r967206 - r967207;
double r967209 = z;
double r967210 = r967208 * r967209;
double r967211 = r967206 - r967210;
double r967212 = r967205 * r967211;
return r967212;
}
double f(double x, double y, double z) {
double r967213 = 1.0;
double r967214 = y;
double r967215 = r967213 - r967214;
double r967216 = z;
double r967217 = r967215 * r967216;
double r967218 = r967213 - r967217;
double r967219 = -2.3842446993784196e+131;
bool r967220 = r967218 <= r967219;
double r967221 = 6.033546520929353e+306;
bool r967222 = r967218 <= r967221;
double r967223 = !r967222;
bool r967224 = r967220 || r967223;
double r967225 = x;
double r967226 = r967225 * r967213;
double r967227 = r967225 * r967216;
double r967228 = r967214 - r967213;
double r967229 = r967227 * r967228;
double r967230 = r967226 + r967229;
double r967231 = r967225 * r967218;
double r967232 = r967224 ? r967230 : r967231;
return r967232;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
if (- 1.0 (* (- 1.0 y) z)) < -2.3842446993784196e+131 or 6.033546520929353e+306 < (- 1.0 (* (- 1.0 y) z)) Initial program 19.2
rmApplied sub-neg19.2
Applied distribute-lft-in19.2
Simplified1.2
if -2.3842446993784196e+131 < (- 1.0 (* (- 1.0 y) z)) < 6.033546520929353e+306Initial program 0.1
Final simplification0.3
herbie shell --seed 2020025
(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))))