Average Error: 0.4 → 0.2
Time: 4.6s
Precision: 64
\[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) + x\]
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) + x
double 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;
}

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. Using strategy rm
  5. Applied fma-udef0.2

    \[\leadsto \color{blue}{\left(y - x\right) \cdot \left(4 - 6 \cdot z\right) + x}\]
  6. Using strategy rm
  7. Applied add-sqr-sqrt0.2

    \[\leadsto \left(y - x\right) \cdot \left(\color{blue}{\sqrt{4} \cdot \sqrt{4}} - 6 \cdot z\right) + x\]
  8. Applied prod-diff0.2

    \[\leadsto \left(y - x\right) \cdot \color{blue}{\left(\mathsf{fma}\left(\sqrt{4}, \sqrt{4}, -z \cdot 6\right) + \mathsf{fma}\left(-z, 6, z \cdot 6\right)\right)} + x\]
  9. Applied distribute-lft-in0.2

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

    \[\leadsto \left(\color{blue}{\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) + x\]
  11. Final simplification0.2

    \[\leadsto \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) + x\]

Reproduce

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