Average Error: 0.4 → 0.1
Time: 5.6s
Precision: 64
\[\frac{60 \cdot \left(x - y\right)}{z - t} + a \cdot 120\]
\[\mathsf{fma}\left(120, a, \frac{60}{\frac{z - t}{x - y}}\right)\]
\frac{60 \cdot \left(x - y\right)}{z - t} + a \cdot 120
\mathsf{fma}\left(120, a, \frac{60}{\frac{z - t}{x - y}}\right)
double f(double x, double y, double z, double t, double a) {
        double r865424 = 60.0;
        double r865425 = x;
        double r865426 = y;
        double r865427 = r865425 - r865426;
        double r865428 = r865424 * r865427;
        double r865429 = z;
        double r865430 = t;
        double r865431 = r865429 - r865430;
        double r865432 = r865428 / r865431;
        double r865433 = a;
        double r865434 = 120.0;
        double r865435 = r865433 * r865434;
        double r865436 = r865432 + r865435;
        return r865436;
}

double f(double x, double y, double z, double t, double a) {
        double r865437 = 120.0;
        double r865438 = a;
        double r865439 = 60.0;
        double r865440 = z;
        double r865441 = t;
        double r865442 = r865440 - r865441;
        double r865443 = x;
        double r865444 = y;
        double r865445 = r865443 - r865444;
        double r865446 = r865442 / r865445;
        double r865447 = r865439 / r865446;
        double r865448 = fma(r865437, r865438, r865447);
        return r865448;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original0.4
Target0.2
Herbie0.1
\[\frac{60}{\frac{z - t}{x - y}} + a \cdot 120\]

Derivation

  1. Initial program 0.4

    \[\frac{60 \cdot \left(x - y\right)}{z - t} + a \cdot 120\]
  2. Simplified0.4

    \[\leadsto \color{blue}{\mathsf{fma}\left(120, a, \frac{60 \cdot \left(x - y\right)}{z - t}\right)}\]
  3. Using strategy rm
  4. Applied associate-/l*0.1

    \[\leadsto \mathsf{fma}\left(120, a, \color{blue}{\frac{60}{\frac{z - t}{x - y}}}\right)\]
  5. Final simplification0.1

    \[\leadsto \mathsf{fma}\left(120, a, \frac{60}{\frac{z - t}{x - y}}\right)\]

Reproduce

herbie shell --seed 2020062 +o rules:numerics
(FPCore (x y z t a)
  :name "Data.Colour.RGB:hslsv from colour-2.3.3, B"
  :precision binary64

  :herbie-target
  (+ (/ 60 (/ (- z t) (- x y))) (* a 120))

  (+ (/ (* 60 (- x y)) (- z t)) (* a 120)))