Average Error: 45.9 → 44.0
Time: 29.6s
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)\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.240748569708252395959560652470813898659 \cdot 10^{-65} \lor \neg \left(z \le 8591447155711080931012589264785569914814000\right):\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;x \cdot \cos \left(\frac{\left(\mathsf{fma}\left(2, y, 1\right) \cdot \left(z \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right) \cdot \sqrt[3]{t}}{16}\right)\\ \end{array}\]
\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)
\begin{array}{l}
\mathbf{if}\;z \le -1.240748569708252395959560652470813898659 \cdot 10^{-65} \lor \neg \left(z \le 8591447155711080931012589264785569914814000\right):\\
\;\;\;\;x\\

\mathbf{else}:\\
\;\;\;\;x \cdot \cos \left(\frac{\left(\mathsf{fma}\left(2, y, 1\right) \cdot \left(z \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right) \cdot \sqrt[3]{t}}{16}\right)\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r594447 = x;
        double r594448 = y;
        double r594449 = 2.0;
        double r594450 = r594448 * r594449;
        double r594451 = 1.0;
        double r594452 = r594450 + r594451;
        double r594453 = z;
        double r594454 = r594452 * r594453;
        double r594455 = t;
        double r594456 = r594454 * r594455;
        double r594457 = 16.0;
        double r594458 = r594456 / r594457;
        double r594459 = cos(r594458);
        double r594460 = r594447 * r594459;
        double r594461 = a;
        double r594462 = r594461 * r594449;
        double r594463 = r594462 + r594451;
        double r594464 = b;
        double r594465 = r594463 * r594464;
        double r594466 = r594465 * r594455;
        double r594467 = r594466 / r594457;
        double r594468 = cos(r594467);
        double r594469 = r594460 * r594468;
        return r594469;
}

double f(double x, double y, double z, double t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
        double r594470 = z;
        double r594471 = -1.2407485697082524e-65;
        bool r594472 = r594470 <= r594471;
        double r594473 = 8.591447155711081e+42;
        bool r594474 = r594470 <= r594473;
        double r594475 = !r594474;
        bool r594476 = r594472 || r594475;
        double r594477 = x;
        double r594478 = 2.0;
        double r594479 = y;
        double r594480 = 1.0;
        double r594481 = fma(r594478, r594479, r594480);
        double r594482 = t;
        double r594483 = cbrt(r594482);
        double r594484 = r594483 * r594483;
        double r594485 = r594470 * r594484;
        double r594486 = r594481 * r594485;
        double r594487 = r594486 * r594483;
        double r594488 = 16.0;
        double r594489 = r594487 / r594488;
        double r594490 = cos(r594489);
        double r594491 = r594477 * r594490;
        double r594492 = r594476 ? r594477 : r594491;
        return r594492;
}

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

Target

Original45.9
Target44.3
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. Split input into 2 regimes
  2. if z < -1.2407485697082524e-65 or 8.591447155711081e+42 < z

    1. Initial program 52.9

      \[\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 52.5

      \[\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 50.2

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

    if -1.2407485697082524e-65 < z < 8.591447155711081e+42

    1. Initial program 38.5

      \[\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 37.5

      \[\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. Using strategy rm
    4. Applied add-cube-cbrt37.5

      \[\leadsto \left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot \color{blue}{\left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \sqrt[3]{t}\right)}}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]
    5. Applied associate-*r*37.5

      \[\leadsto \left(x \cdot \cos \left(\frac{\color{blue}{\left(\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right) \cdot \sqrt[3]{t}}}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]
    6. Simplified37.4

      \[\leadsto \left(x \cdot \cos \left(\frac{\color{blue}{\left(\mathsf{fma}\left(2, y, 1\right) \cdot \left(z \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right)} \cdot \sqrt[3]{t}}{16}\right)\right) \cdot \cos \left(\frac{0}{16}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification44.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.240748569708252395959560652470813898659 \cdot 10^{-65} \lor \neg \left(z \le 8591447155711080931012589264785569914814000\right):\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;x \cdot \cos \left(\frac{\left(\mathsf{fma}\left(2, y, 1\right) \cdot \left(z \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right) \cdot \sqrt[3]{t}}{16}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019325 +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))))