Average Error: 0.4 → 0.2
Time: 23.7s
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 r180630 = x;
        double r180631 = y;
        double r180632 = r180631 - r180630;
        double r180633 = 6.0;
        double r180634 = r180632 * r180633;
        double r180635 = 2.0;
        double r180636 = 3.0;
        double r180637 = r180635 / r180636;
        double r180638 = z;
        double r180639 = r180637 - r180638;
        double r180640 = r180634 * r180639;
        double r180641 = r180630 + r180640;
        return r180641;
}

double f(double x, double y, double z) {
        double r180642 = y;
        double r180643 = x;
        double r180644 = r180642 - r180643;
        double r180645 = 6.0;
        double r180646 = 2.0;
        double r180647 = 3.0;
        double r180648 = r180646 / r180647;
        double r180649 = z;
        double r180650 = r180648 - r180649;
        double r180651 = r180645 * r180650;
        double r180652 = fma(r180644, r180651, r180643);
        return r180652;
}

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))))