Average Error: 47.2 → 44.6
Time: 27.2s
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}\;t \le -2.880621304139379492340982563553857775143 \cdot 10^{-30} \lor \neg \left(t \le 1.667516752212910857549534497395294505447 \cdot 10^{-147}\right):\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot \cos \left(\sqrt[3]{\mathsf{fma}\left(2, y, 1\right)} \cdot \left(\left(t \cdot \frac{z}{16}\right) \cdot \left(\sqrt[3]{\mathsf{fma}\left(2, y, 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(2, y, 1\right)}\right)\right)\right)\right) \cdot \cos \left(\mathsf{fma}\left(a, 2, 1\right) \cdot \left(\frac{b}{16} \cdot t\right)\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}\;t \le -2.880621304139379492340982563553857775143 \cdot 10^{-30} \lor \neg \left(t \le 1.667516752212910857549534497395294505447 \cdot 10^{-147}\right):\\
\;\;\;\;x\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r632399 = x;
        double r632400 = y;
        double r632401 = 2.0;
        double r632402 = r632400 * r632401;
        double r632403 = 1.0;
        double r632404 = r632402 + r632403;
        double r632405 = z;
        double r632406 = r632404 * r632405;
        double r632407 = t;
        double r632408 = r632406 * r632407;
        double r632409 = 16.0;
        double r632410 = r632408 / r632409;
        double r632411 = cos(r632410);
        double r632412 = r632399 * r632411;
        double r632413 = a;
        double r632414 = r632413 * r632401;
        double r632415 = r632414 + r632403;
        double r632416 = b;
        double r632417 = r632415 * r632416;
        double r632418 = r632417 * r632407;
        double r632419 = r632418 / r632409;
        double r632420 = cos(r632419);
        double r632421 = r632412 * r632420;
        return r632421;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r632422 = t;
        double r632423 = -2.8806213041393795e-30;
        bool r632424 = r632422 <= r632423;
        double r632425 = 1.6675167522129109e-147;
        bool r632426 = r632422 <= r632425;
        double r632427 = !r632426;
        bool r632428 = r632424 || r632427;
        double r632429 = x;
        double r632430 = 2.0;
        double r632431 = y;
        double r632432 = 1.0;
        double r632433 = fma(r632430, r632431, r632432);
        double r632434 = cbrt(r632433);
        double r632435 = z;
        double r632436 = 16.0;
        double r632437 = r632435 / r632436;
        double r632438 = r632422 * r632437;
        double r632439 = r632434 * r632434;
        double r632440 = r632438 * r632439;
        double r632441 = r632434 * r632440;
        double r632442 = cos(r632441);
        double r632443 = r632429 * r632442;
        double r632444 = a;
        double r632445 = fma(r632444, r632430, r632432);
        double r632446 = b;
        double r632447 = r632446 / r632436;
        double r632448 = r632447 * r632422;
        double r632449 = r632445 * r632448;
        double r632450 = cos(r632449);
        double r632451 = r632443 * r632450;
        double r632452 = r632428 ? r632429 : r632451;
        return r632452;
}

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

Original47.2
Target45.2
Herbie44.6
\[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 t < -2.8806213041393795e-30 or 1.6675167522129109e-147 < t

    1. Initial program 56.2

      \[\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. Simplified56.0

      \[\leadsto \color{blue}{\left(\cos \left(\left(\frac{z}{16} \cdot t\right) \cdot \mathsf{fma}\left(2, y, 1\right)\right) \cdot x\right) \cdot \cos \left(\left(\frac{b}{16} \cdot t\right) \cdot \mathsf{fma}\left(a, 2, 1\right)\right)}\]
    3. Taylor expanded around 0 54.9

      \[\leadsto \left(\color{blue}{1} \cdot x\right) \cdot \cos \left(\left(\frac{b}{16} \cdot t\right) \cdot \mathsf{fma}\left(a, 2, 1\right)\right)\]
    4. Taylor expanded around 0 52.9

      \[\leadsto \color{blue}{x}\]

    if -2.8806213041393795e-30 < t < 1.6675167522129109e-147

    1. Initial program 30.7

      \[\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. Simplified29.3

      \[\leadsto \color{blue}{\left(\cos \left(\left(\frac{z}{16} \cdot t\right) \cdot \mathsf{fma}\left(2, y, 1\right)\right) \cdot x\right) \cdot \cos \left(\left(\frac{b}{16} \cdot t\right) \cdot \mathsf{fma}\left(a, 2, 1\right)\right)}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt29.3

      \[\leadsto \left(\cos \left(\left(\frac{z}{16} \cdot t\right) \cdot \color{blue}{\left(\left(\sqrt[3]{\mathsf{fma}\left(2, y, 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(2, y, 1\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(2, y, 1\right)}\right)}\right) \cdot x\right) \cdot \cos \left(\left(\frac{b}{16} \cdot t\right) \cdot \mathsf{fma}\left(a, 2, 1\right)\right)\]
    5. Applied associate-*r*29.4

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

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

Reproduce

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