x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)\left(\left(y - x\right) \cdot \left(4 - 6 \cdot z\right) + \left(y - x\right) \cdot \mathsf{fma}\left(-z, 6, z \cdot 6\right)\right) + xdouble f(double x, double y, double z) {
double r288705 = x;
double r288706 = y;
double r288707 = r288706 - r288705;
double r288708 = 6.0;
double r288709 = r288707 * r288708;
double r288710 = 2.0;
double r288711 = 3.0;
double r288712 = r288710 / r288711;
double r288713 = z;
double r288714 = r288712 - r288713;
double r288715 = r288709 * r288714;
double r288716 = r288705 + r288715;
return r288716;
}
double f(double x, double y, double z) {
double r288717 = y;
double r288718 = x;
double r288719 = r288717 - r288718;
double r288720 = 4.0;
double r288721 = 6.0;
double r288722 = z;
double r288723 = r288721 * r288722;
double r288724 = r288720 - r288723;
double r288725 = r288719 * r288724;
double r288726 = -r288722;
double r288727 = r288722 * r288721;
double r288728 = fma(r288726, r288721, r288727);
double r288729 = r288719 * r288728;
double r288730 = r288725 + r288729;
double r288731 = r288730 + r288718;
return r288731;
}



Bits error versus x



Bits error versus y



Bits error versus z
Initial program 0.4
Simplified0.2
Taylor expanded around 0 0.2
rmApplied fma-udef0.2
rmApplied add-sqr-sqrt0.2
Applied prod-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020100 +o rules:numerics
(FPCore (x y z)
:name "Data.Colour.RGBSpace.HSL:hsl from colour-2.3.3, D"
:precision binary64
(+ x (* (* (- y x) 6) (- (/ 2 3) z))))