Average Error: 0.4 → 0.3
Time: 4.5s
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) + \mathsf{fma}\left(-z, 1, z \cdot 1\right) \cdot \left(\left(y - x\right) \cdot 6\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) + \mathsf{fma}\left(-z, 1, z \cdot 1\right) \cdot \left(\left(y - x\right) \cdot 6\right)
double f(double x, double y, double z) {
        double r226643 = x;
        double r226644 = y;
        double r226645 = r226644 - r226643;
        double r226646 = 6.0;
        double r226647 = r226645 * r226646;
        double r226648 = 2.0;
        double r226649 = 3.0;
        double r226650 = r226648 / r226649;
        double r226651 = z;
        double r226652 = r226650 - r226651;
        double r226653 = r226647 * r226652;
        double r226654 = r226643 + r226653;
        return r226654;
}

double f(double x, double y, double z) {
        double r226655 = y;
        double r226656 = x;
        double r226657 = r226655 - r226656;
        double r226658 = 6.0;
        double r226659 = 2.0;
        double r226660 = 3.0;
        double r226661 = r226659 / r226660;
        double r226662 = z;
        double r226663 = r226661 - r226662;
        double r226664 = r226658 * r226663;
        double r226665 = fma(r226657, r226664, r226656);
        double r226666 = -r226662;
        double r226667 = 1.0;
        double r226668 = r226662 * r226667;
        double r226669 = fma(r226666, r226667, r226668);
        double r226670 = r226657 * r226658;
        double r226671 = r226669 * r226670;
        double r226672 = r226665 + r226671;
        return r226672;
}

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. Using strategy rm
  3. Applied *-un-lft-identity0.4

    \[\leadsto x + \left(\left(y - x\right) \cdot 6\right) \cdot \left(\frac{2}{3} - \color{blue}{1 \cdot z}\right)\]
  4. Applied add-sqr-sqrt0.4

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

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

    \[\leadsto x + \color{blue}{\left(\mathsf{fma}\left(\sqrt{\frac{2}{3}}, \sqrt{\frac{2}{3}}, -z \cdot 1\right) \cdot \left(\left(y - x\right) \cdot 6\right) + \mathsf{fma}\left(-z, 1, z \cdot 1\right) \cdot \left(\left(y - x\right) \cdot 6\right)\right)}\]
  7. Applied associate-+r+0.4

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

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

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

Reproduce

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