Average Error: 0.4 → 0.1
Time: 42.6s
Precision: 64
\[\frac{60 \cdot \left(x - y\right)}{z - t} + a \cdot 120\]
\[\mathsf{fma}\left(a, 120, \frac{60}{\frac{z - t}{x - y}}\right)\]
\frac{60 \cdot \left(x - y\right)}{z - t} + a \cdot 120
\mathsf{fma}\left(a, 120, \frac{60}{\frac{z - t}{x - y}}\right)
double f(double x, double y, double z, double t, double a) {
        double r145155793 = 60.0;
        double r145155794 = x;
        double r145155795 = y;
        double r145155796 = r145155794 - r145155795;
        double r145155797 = r145155793 * r145155796;
        double r145155798 = z;
        double r145155799 = t;
        double r145155800 = r145155798 - r145155799;
        double r145155801 = r145155797 / r145155800;
        double r145155802 = a;
        double r145155803 = 120.0;
        double r145155804 = r145155802 * r145155803;
        double r145155805 = r145155801 + r145155804;
        return r145155805;
}

double f(double x, double y, double z, double t, double a) {
        double r145155806 = a;
        double r145155807 = 120.0;
        double r145155808 = 60.0;
        double r145155809 = z;
        double r145155810 = t;
        double r145155811 = r145155809 - r145155810;
        double r145155812 = x;
        double r145155813 = y;
        double r145155814 = r145155812 - r145155813;
        double r145155815 = r145155811 / r145155814;
        double r145155816 = r145155808 / r145155815;
        double r145155817 = fma(r145155806, r145155807, r145155816);
        return r145155817;
}

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.1
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(a, 120, \frac{60 \cdot \left(x - y\right)}{z - t}\right)}\]
  3. Using strategy rm
  4. Applied associate-/l*0.1

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

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

Reproduce

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

  :herbie-target
  (+ (/ 60.0 (/ (- z t) (- x y))) (* a 120.0))

  (+ (/ (* 60.0 (- x y)) (- z t)) (* a 120.0)))