x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\begin{array}{l}
\mathbf{if}\;z \le -348871686386691.0625 \lor \neg \left(z \le 10103.67382956603796628769487142562866211\right):\\
\;\;\;\;\mathsf{fma}\left(1, x, \left(x \cdot z\right) \cdot \left(y - 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z, y - 1, 1\right) \cdot x\\
\end{array}double f(double x, double y, double z) {
double r519903 = x;
double r519904 = 1.0;
double r519905 = y;
double r519906 = r519904 - r519905;
double r519907 = z;
double r519908 = r519906 * r519907;
double r519909 = r519904 - r519908;
double r519910 = r519903 * r519909;
return r519910;
}
double f(double x, double y, double z) {
double r519911 = z;
double r519912 = -348871686386691.06;
bool r519913 = r519911 <= r519912;
double r519914 = 10103.673829566038;
bool r519915 = r519911 <= r519914;
double r519916 = !r519915;
bool r519917 = r519913 || r519916;
double r519918 = 1.0;
double r519919 = x;
double r519920 = r519919 * r519911;
double r519921 = y;
double r519922 = r519921 - r519918;
double r519923 = r519920 * r519922;
double r519924 = fma(r519918, r519919, r519923);
double r519925 = fma(r519911, r519922, r519918);
double r519926 = r519925 * r519919;
double r519927 = r519917 ? r519924 : r519926;
return r519927;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 3.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -348871686386691.06 or 10103.673829566038 < z Initial program 8.1
Simplified8.1
rmApplied add-cube-cbrt9.1
Applied associate-*l*9.2
Taylor expanded around inf 8.1
Simplified0.1
if -348871686386691.06 < z < 10103.673829566038Initial program 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019212 +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.618195973607049e50) (+ x (* (- 1 y) (* (- z) x))) (if (< (* x (- 1 (* (- 1 y) z))) 3.8922376496639029e134) (- (* (* x y) z) (- (* x z) x)) (+ x (* (- 1 y) (* (- z) x)))))
(* x (- 1 (* (- 1 y) z))))