x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -8.468958278259224291912566289483962982914 \cdot 10^{66}:\\
\;\;\;\;x \cdot 1 + \left(x \cdot z\right) \cdot \left(y - 1\right)\\
\mathbf{elif}\;z \le 19144349.1059049777686595916748046875:\\
\;\;\;\;x \cdot \left(1 - \left(1 - y\right) \cdot z\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 1, \left(x \cdot \left(y - 1\right)\right) \cdot z\right) + \left(x \cdot z\right) \cdot \mathsf{fma}\left(-\sqrt{1}, \sqrt{1}, \sqrt{1} \cdot \sqrt{1}\right)\\
\end{array}double f(double x, double y, double z) {
double r772168 = x;
double r772169 = 1.0;
double r772170 = y;
double r772171 = r772169 - r772170;
double r772172 = z;
double r772173 = r772171 * r772172;
double r772174 = r772169 - r772173;
double r772175 = r772168 * r772174;
return r772175;
}
double f(double x, double y, double z) {
double r772176 = z;
double r772177 = -8.468958278259224e+66;
bool r772178 = r772176 <= r772177;
double r772179 = x;
double r772180 = 1.0;
double r772181 = r772179 * r772180;
double r772182 = r772179 * r772176;
double r772183 = y;
double r772184 = r772183 - r772180;
double r772185 = r772182 * r772184;
double r772186 = r772181 + r772185;
double r772187 = 19144349.105904978;
bool r772188 = r772176 <= r772187;
double r772189 = r772180 - r772183;
double r772190 = r772189 * r772176;
double r772191 = r772180 - r772190;
double r772192 = r772179 * r772191;
double r772193 = r772179 * r772184;
double r772194 = r772193 * r772176;
double r772195 = fma(r772179, r772180, r772194);
double r772196 = sqrt(r772180);
double r772197 = -r772196;
double r772198 = r772196 * r772196;
double r772199 = fma(r772197, r772196, r772198);
double r772200 = r772182 * r772199;
double r772201 = r772195 + r772200;
double r772202 = r772188 ? r772192 : r772201;
double r772203 = r772178 ? r772186 : r772202;
return r772203;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -8.468958278259224e+66Initial program 11.9
rmApplied sub-neg11.9
Applied distribute-lft-in11.9
Simplified0.1
if -8.468958278259224e+66 < z < 19144349.105904978Initial program 0.3
if 19144349.105904978 < z Initial program 9.7
rmApplied sub-neg9.7
Applied distribute-lft-in9.7
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied add-cube-cbrt0.5
Applied prod-diff0.5
Applied distribute-lft-in0.5
Applied associate-+r+0.5
Simplified0.5
rmApplied associate-*r*0.5
Simplified0.1
Final simplification0.2
herbie shell --seed 2020001 +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))))