Average Error: 0.4 → 0.2
Time: 24.4s
Precision: 64
\[x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)\]
\[\mathsf{fma}\left(y - x, 6 \cdot \left(\frac{2}{3} - z\right), x\right)\]
x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)
\mathsf{fma}\left(y - x, 6 \cdot \left(\frac{2}{3} - z\right), x\right)
double f(double x, double y, double z) {
        double r147203 = x;
        double r147204 = y;
        double r147205 = r147204 - r147203;
        double r147206 = 6.0;
        double r147207 = r147205 * r147206;
        double r147208 = 2.0;
        double r147209 = 3.0;
        double r147210 = r147208 / r147209;
        double r147211 = z;
        double r147212 = r147210 - r147211;
        double r147213 = r147207 * r147212;
        double r147214 = r147203 + r147213;
        return r147214;
}

double f(double x, double y, double z) {
        double r147215 = y;
        double r147216 = x;
        double r147217 = r147215 - r147216;
        double r147218 = 6.0;
        double r147219 = 2.0;
        double r147220 = 3.0;
        double r147221 = r147219 / r147220;
        double r147222 = z;
        double r147223 = r147221 - r147222;
        double r147224 = r147218 * r147223;
        double r147225 = fma(r147217, r147224, r147216);
        return r147225;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.4

    \[x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(y - x, 6 \cdot \left(\frac{2}{3} - z\right), x\right)}\]
  3. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(y - x, 6 \cdot \left(\frac{2}{3} - z\right), x\right)\]

Reproduce

herbie shell --seed 2019325 +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))))