Average Error: 46.0 → 44.0
Time: 1.3m
Precision: 64
\[\left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot t}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\]
\[x\]
\left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot t}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)
x
double f(double x, double y, double z, double t, double a, double b) {
        double r163634439 = x;
        double r163634440 = y;
        double r163634441 = 2.0;
        double r163634442 = r163634440 * r163634441;
        double r163634443 = 1.0;
        double r163634444 = r163634442 + r163634443;
        double r163634445 = z;
        double r163634446 = r163634444 * r163634445;
        double r163634447 = t;
        double r163634448 = r163634446 * r163634447;
        double r163634449 = 16.0;
        double r163634450 = r163634448 / r163634449;
        double r163634451 = cos(r163634450);
        double r163634452 = r163634439 * r163634451;
        double r163634453 = a;
        double r163634454 = r163634453 * r163634441;
        double r163634455 = r163634454 + r163634443;
        double r163634456 = b;
        double r163634457 = r163634455 * r163634456;
        double r163634458 = r163634457 * r163634447;
        double r163634459 = r163634458 / r163634449;
        double r163634460 = cos(r163634459);
        double r163634461 = r163634452 * r163634460;
        return r163634461;
}

double f(double x, double __attribute__((unused)) y, double __attribute__((unused)) z, double __attribute__((unused)) t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
        double r163634462 = x;
        return r163634462;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original46.0
Target44.2
Herbie44.0
\[x \cdot \cos \left(\frac{b}{16} \cdot \frac{t}{\left(1 - a \cdot 2\right) + {\left(a \cdot 2\right)}^{2}}\right)\]

Derivation

  1. Initial program 46.0

    \[\left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot t}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\]
  2. Taylor expanded around 0 45.4

    \[\leadsto \left(x \cdot \color{blue}{1}\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\]
  3. Taylor expanded around 0 44.0

    \[\leadsto \color{blue}{x}\]
  4. Final simplification44.0

    \[\leadsto x\]

Reproduce

herbie shell --seed 2019173 +o rules:numerics
(FPCore (x y z t a b)
  :name "Codec.Picture.Jpg.FastDct:referenceDct from JuicyPixels-3.2.6.1"

  :herbie-target
  (* x (cos (* (/ b 16.0) (/ t (+ (- 1.0 (* a 2.0)) (pow (* a 2.0) 2.0))))))

  (* (* x (cos (/ (* (* (+ (* y 2.0) 1.0) z) t) 16.0))) (cos (/ (* (* (+ (* a 2.0) 1.0) b) t) 16.0))))