Average Error: 46.5 → 44.3
Time: 12.9s
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.060669677199602035061477865845248702011 \cdot 10^{-68} \lor \neg \left(t \le 2.298617900197692054257084183444212053386 \cdot 10^{-208}\right):\\ \;\;\;\;\left(x \cdot 1\right) \cdot \sqrt[3]{1}\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot \cos \left(\frac{\left(t \cdot z\right) \cdot \mathsf{fma}\left(2, y, 1\right)}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot 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}\;t \le -2.060669677199602035061477865845248702011 \cdot 10^{-68} \lor \neg \left(t \le 2.298617900197692054257084183444212053386 \cdot 10^{-208}\right):\\
\;\;\;\;\left(x \cdot 1\right) \cdot \sqrt[3]{1}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r1055260 = x;
        double r1055261 = y;
        double r1055262 = 2.0;
        double r1055263 = r1055261 * r1055262;
        double r1055264 = 1.0;
        double r1055265 = r1055263 + r1055264;
        double r1055266 = z;
        double r1055267 = r1055265 * r1055266;
        double r1055268 = t;
        double r1055269 = r1055267 * r1055268;
        double r1055270 = 16.0;
        double r1055271 = r1055269 / r1055270;
        double r1055272 = cos(r1055271);
        double r1055273 = r1055260 * r1055272;
        double r1055274 = a;
        double r1055275 = r1055274 * r1055262;
        double r1055276 = r1055275 + r1055264;
        double r1055277 = b;
        double r1055278 = r1055276 * r1055277;
        double r1055279 = r1055278 * r1055268;
        double r1055280 = r1055279 / r1055270;
        double r1055281 = cos(r1055280);
        double r1055282 = r1055273 * r1055281;
        return r1055282;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r1055283 = t;
        double r1055284 = -2.060669677199602e-68;
        bool r1055285 = r1055283 <= r1055284;
        double r1055286 = 2.298617900197692e-208;
        bool r1055287 = r1055283 <= r1055286;
        double r1055288 = !r1055287;
        bool r1055289 = r1055285 || r1055288;
        double r1055290 = x;
        double r1055291 = 1.0;
        double r1055292 = r1055290 * r1055291;
        double r1055293 = cbrt(r1055291);
        double r1055294 = r1055292 * r1055293;
        double r1055295 = z;
        double r1055296 = r1055283 * r1055295;
        double r1055297 = 2.0;
        double r1055298 = y;
        double r1055299 = 1.0;
        double r1055300 = fma(r1055297, r1055298, r1055299);
        double r1055301 = r1055296 * r1055300;
        double r1055302 = 16.0;
        double r1055303 = r1055301 / r1055302;
        double r1055304 = cos(r1055303);
        double r1055305 = r1055290 * r1055304;
        double r1055306 = a;
        double r1055307 = r1055306 * r1055297;
        double r1055308 = r1055307 + r1055299;
        double r1055309 = b;
        double r1055310 = r1055308 * r1055309;
        double r1055311 = r1055310 * r1055283;
        double r1055312 = r1055311 / r1055302;
        double r1055313 = cos(r1055312);
        double r1055314 = r1055305 * r1055313;
        double r1055315 = r1055289 ? r1055294 : r1055314;
        return r1055315;
}

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

Original46.5
Target44.8
Herbie44.3
\[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.060669677199602e-68 or 2.298617900197692e-208 < t

    1. Initial program 53.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 52.5

      \[\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. Using strategy rm
    4. Applied associate-*l*52.4

      \[\leadsto \left(x \cdot 1\right) \cdot \cos \left(\frac{\color{blue}{\left(a \cdot 2 + 1\right) \cdot \left(b \cdot t\right)}}{16}\right)\]
    5. Using strategy rm
    6. Applied add-cbrt-cube52.4

      \[\leadsto \left(x \cdot 1\right) \cdot \color{blue}{\sqrt[3]{\left(\cos \left(\frac{\left(a \cdot 2 + 1\right) \cdot \left(b \cdot t\right)}{16}\right) \cdot \cos \left(\frac{\left(a \cdot 2 + 1\right) \cdot \left(b \cdot t\right)}{16}\right)\right) \cdot \cos \left(\frac{\left(a \cdot 2 + 1\right) \cdot \left(b \cdot t\right)}{16}\right)}}\]
    7. Simplified52.4

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

      \[\leadsto \left(x \cdot 1\right) \cdot \sqrt[3]{{\color{blue}{1}}^{3}}\]

    if -2.060669677199602e-68 < t < 2.298617900197692e-208

    1. Initial program 28.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 inf 28.0

      \[\leadsto \left(x \cdot \cos \left(\frac{\color{blue}{1 \cdot \left(t \cdot z\right) + 2 \cdot \left(t \cdot \left(z \cdot y\right)\right)}}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\]
    3. Simplified27.3

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

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

Reproduce

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