Average Error: 0.4 → 0.2
Time: 20.6s
Precision: 64
\[x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)\]
\[\mathsf{fma}\left(y - x, 4 - 6 \cdot z, x\right)\]
x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - z\right)
\mathsf{fma}\left(y - x, 4 - 6 \cdot z, x\right)
double f(double x, double y, double z) {
        double r140720 = x;
        double r140721 = y;
        double r140722 = r140721 - r140720;
        double r140723 = 6.0;
        double r140724 = r140722 * r140723;
        double r140725 = 2.0;
        double r140726 = 3.0;
        double r140727 = r140725 / r140726;
        double r140728 = z;
        double r140729 = r140727 - r140728;
        double r140730 = r140724 * r140729;
        double r140731 = r140720 + r140730;
        return r140731;
}

double f(double x, double y, double z) {
        double r140732 = y;
        double r140733 = x;
        double r140734 = r140732 - r140733;
        double r140735 = 4.0;
        double r140736 = 6.0;
        double r140737 = z;
        double r140738 = r140736 * r140737;
        double r140739 = r140735 - r140738;
        double r140740 = fma(r140734, r140739, r140733);
        return r140740;
}

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. Taylor expanded around 0 0.2

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

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

Reproduce

herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z)
  :name "Data.Colour.RGBSpace.HSL:hsl from colour-2.3.3, D"
  (+ x (* (* (- y x) 6.0) (- (/ 2.0 3.0) z))))