x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)\mathsf{fma}\left(y - x, \mathsf{fma}\left(1, 4, -z \cdot 6\right), \mathsf{fma}\left(\mathsf{fma}\left(-z, 6, z \cdot 6\right), y - x, x\right)\right)double code(double x, double y, double z) {
return (x + (((y - x) * 6.0) * ((2.0 / 3.0) - z)));
}
double code(double x, double y, double z) {
return fma((y - x), fma(1.0, 4.0, -(z * 6.0)), fma(fma(-z, 6.0, (z * 6.0)), (y - x), x));
}



Bits error versus x



Bits error versus y



Bits error versus z
Results
Initial program 0.4
Simplified0.2
Taylor expanded around 0 0.2
rmApplied fma-udef0.2
rmApplied *-un-lft-identity0.2
Applied prod-diff0.2
Applied distribute-lft-in0.2
Applied associate-+l+0.2
Simplified0.2
rmApplied fma-def0.1
Final simplification0.1
herbie shell --seed 2020056 +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))))