x \cdot \left(1 - y \cdot z\right)
\begin{array}{l}
t_0 := -y \cdot \left(z \cdot x\right)\\
\mathbf{if}\;y \cdot z \leq -2.3961121694595986 \cdot 10^{+203}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;y \cdot z \leq 7.893920601260154 \cdot 10^{+301}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(1, 1, -y \cdot z\right) + x \cdot \mathsf{fma}\left(-z, y, y \cdot z\right)\\
\mathbf{else}:\\
\;\;\;\;t_0\\
\end{array}
(FPCore (x y z) :precision binary64 (* x (- 1.0 (* y z))))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (- (* y (* z x)))))
(if (<= (* y z) -2.3961121694595986e+203)
t_0
(if (<= (* y z) 7.893920601260154e+301)
(+ (* x (fma 1.0 1.0 (- (* y z)))) (* x (fma (- z) y (* y z))))
t_0))))double code(double x, double y, double z) {
return x * (1.0 - (y * z));
}
double code(double x, double y, double z) {
double t_0 = -(y * (z * x));
double tmp;
if ((y * z) <= -2.3961121694595986e+203) {
tmp = t_0;
} else if ((y * z) <= 7.893920601260154e+301) {
tmp = (x * fma(1.0, 1.0, -(y * z))) + (x * fma(-z, y, (y * z)));
} else {
tmp = t_0;
}
return tmp;
}



Bits error versus x



Bits error versus y



Bits error versus z
if (*.f64 y z) < -2.39611216945959855e203 or 7.89392060126015389e301 < (*.f64 y z) Initial program 39.6
Taylor expanded in y around inf 0.4
Simplified0.4
if -2.39611216945959855e203 < (*.f64 y z) < 7.89392060126015389e301Initial program 0.1
Applied add-sqr-sqrt_binary640.1
Applied prod-diff_binary640.1
Applied distribute-lft-in_binary640.1
Final simplification0.1
herbie shell --seed 2022125
(FPCore (x y z)
:name "Data.Colour.RGBSpace.HSV:hsv from colour-2.3.3, I"
:precision binary64
(* x (- 1.0 (* y z))))