Average Error: 0.4 → 0.2
Time: 5.2s
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 r261137 = x;
        double r261138 = y;
        double r261139 = r261138 - r261137;
        double r261140 = 6.0;
        double r261141 = r261139 * r261140;
        double r261142 = 2.0;
        double r261143 = 3.0;
        double r261144 = r261142 / r261143;
        double r261145 = z;
        double r261146 = r261144 - r261145;
        double r261147 = r261141 * r261146;
        double r261148 = r261137 + r261147;
        return r261148;
}

double f(double x, double y, double z) {
        double r261149 = y;
        double r261150 = x;
        double r261151 = r261149 - r261150;
        double r261152 = 6.0;
        double r261153 = 2.0;
        double r261154 = 3.0;
        double r261155 = r261153 / r261154;
        double r261156 = z;
        double r261157 = r261155 - r261156;
        double r261158 = r261152 * r261157;
        double r261159 = fma(r261151, r261158, r261150);
        return r261159;
}

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