x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -1.044720147495814947738710748278359989149 \cdot 10^{-121} \lor \neg \left(z \le 7.111877045651439551412938008198758963312 \cdot 10^{-147}\right):\\
\;\;\;\;\left(-\left(x \cdot z\right) \cdot \left(1 - y\right)\right) + x \cdot 1\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\mathsf{fma}\left(z, 1 - y, 1\right) \cdot \left(1 - \left(1 - y\right) \cdot z\right)\right)}{1 + \left(1 - y\right) \cdot z}\\
\end{array}double f(double x, double y, double z) {
double r512217 = x;
double r512218 = 1.0;
double r512219 = y;
double r512220 = r512218 - r512219;
double r512221 = z;
double r512222 = r512220 * r512221;
double r512223 = r512218 - r512222;
double r512224 = r512217 * r512223;
return r512224;
}
double f(double x, double y, double z) {
double r512225 = z;
double r512226 = -1.044720147495815e-121;
bool r512227 = r512225 <= r512226;
double r512228 = 7.11187704565144e-147;
bool r512229 = r512225 <= r512228;
double r512230 = !r512229;
bool r512231 = r512227 || r512230;
double r512232 = x;
double r512233 = r512232 * r512225;
double r512234 = 1.0;
double r512235 = y;
double r512236 = r512234 - r512235;
double r512237 = r512233 * r512236;
double r512238 = -r512237;
double r512239 = r512232 * r512234;
double r512240 = r512238 + r512239;
double r512241 = fma(r512225, r512236, r512234);
double r512242 = r512236 * r512225;
double r512243 = r512234 - r512242;
double r512244 = r512241 * r512243;
double r512245 = r512232 * r512244;
double r512246 = r512234 + r512242;
double r512247 = r512245 / r512246;
double r512248 = r512231 ? r512240 : r512247;
return r512248;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.3 |
|---|---|
| Target | 0.3 |
| Herbie | 1.0 |
if z < -1.044720147495815e-121 or 7.11187704565144e-147 < z Initial program 5.1
rmApplied sub-neg5.1
Applied distribute-rgt-in5.1
Simplified5.1
Simplified1.0
if -1.044720147495815e-121 < z < 7.11187704565144e-147Initial program 0.0
rmApplied flip--0.2
Applied associate-*r/1.1
Simplified1.1
Final simplification1.0
herbie shell --seed 2019174 +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))))