Average Error: 46.3 → 44.2
Time: 13.7s
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)\]
\[\left(x \cdot \cos \left(\frac{0}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]
\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)
\left(x \cdot \cos \left(\frac{0}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)
double f(double x, double y, double z, double t, double a, double b) {
        double r884392 = x;
        double r884393 = y;
        double r884394 = 2.0;
        double r884395 = r884393 * r884394;
        double r884396 = 1.0;
        double r884397 = r884395 + r884396;
        double r884398 = z;
        double r884399 = r884397 * r884398;
        double r884400 = t;
        double r884401 = r884399 * r884400;
        double r884402 = 16.0;
        double r884403 = r884401 / r884402;
        double r884404 = cos(r884403);
        double r884405 = r884392 * r884404;
        double r884406 = a;
        double r884407 = r884406 * r884394;
        double r884408 = r884407 + r884396;
        double r884409 = b;
        double r884410 = r884408 * r884409;
        double r884411 = r884410 * r884400;
        double r884412 = r884411 / r884402;
        double r884413 = cos(r884412);
        double r884414 = r884405 * r884413;
        return r884414;
}

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 r884415 = x;
        double r884416 = 0.0;
        double r884417 = 16.0;
        double r884418 = r884416 / r884417;
        double r884419 = cos(r884418);
        double r884420 = r884415 * r884419;
        double r884421 = r884420 * r884419;
        return r884421;
}

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.3
Target44.4
Herbie44.2
\[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.3

    \[\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.6

    \[\leadsto \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{\color{blue}{0}}{16}\right)\]
  3. Taylor expanded around 0 44.2

    \[\leadsto \left(x \cdot \cos \left(\frac{\color{blue}{0}}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]
  4. Final simplification44.2

    \[\leadsto \left(x \cdot \cos \left(\frac{0}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]

Reproduce

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

  :herbie-target
  (* x (cos (* (/ b 16) (/ t (+ (- 1 (* a 2)) (pow (* a 2) 2))))))

  (* (* x (cos (/ (* (* (+ (* y 2) 1) z) t) 16))) (cos (/ (* (* (+ (* a 2) 1) b) t) 16))))