Average Error: 17.6 → 0.3
Time: 8.9s
Precision: 64
\[\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
\[\mathsf{fma}\left(J \cdot \mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right), \cos \left(\frac{K}{2}\right), U\right)\]
\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U
\mathsf{fma}\left(J \cdot \mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right), \cos \left(\frac{K}{2}\right), U\right)
double f(double J, double l, double K, double U) {
        double r169050 = J;
        double r169051 = l;
        double r169052 = exp(r169051);
        double r169053 = -r169051;
        double r169054 = exp(r169053);
        double r169055 = r169052 - r169054;
        double r169056 = r169050 * r169055;
        double r169057 = K;
        double r169058 = 2.0;
        double r169059 = r169057 / r169058;
        double r169060 = cos(r169059);
        double r169061 = r169056 * r169060;
        double r169062 = U;
        double r169063 = r169061 + r169062;
        return r169063;
}

double f(double J, double l, double K, double U) {
        double r169064 = J;
        double r169065 = 0.3333333333333333;
        double r169066 = l;
        double r169067 = 3.0;
        double r169068 = pow(r169066, r169067);
        double r169069 = 0.016666666666666666;
        double r169070 = 5.0;
        double r169071 = pow(r169066, r169070);
        double r169072 = 2.0;
        double r169073 = r169072 * r169066;
        double r169074 = fma(r169069, r169071, r169073);
        double r169075 = fma(r169065, r169068, r169074);
        double r169076 = r169064 * r169075;
        double r169077 = K;
        double r169078 = 2.0;
        double r169079 = r169077 / r169078;
        double r169080 = cos(r169079);
        double r169081 = U;
        double r169082 = fma(r169076, r169080, r169081);
        return r169082;
}

Error

Bits error versus J

Bits error versus l

Bits error versus K

Bits error versus U

Derivation

  1. Initial program 17.6

    \[\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
  2. Simplified17.6

    \[\leadsto \color{blue}{\mathsf{fma}\left(J \cdot \left(e^{\ell} - e^{-\ell}\right), \cos \left(\frac{K}{2}\right), U\right)}\]
  3. Taylor expanded around 0 0.3

    \[\leadsto \mathsf{fma}\left(J \cdot \color{blue}{\left(\frac{1}{3} \cdot {\ell}^{3} + \left(\frac{1}{60} \cdot {\ell}^{5} + 2 \cdot \ell\right)\right)}, \cos \left(\frac{K}{2}\right), U\right)\]
  4. Simplified0.3

    \[\leadsto \mathsf{fma}\left(J \cdot \color{blue}{\mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right)}, \cos \left(\frac{K}{2}\right), U\right)\]
  5. Final simplification0.3

    \[\leadsto \mathsf{fma}\left(J \cdot \mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right), \cos \left(\frac{K}{2}\right), U\right)\]

Reproduce

herbie shell --seed 2019362 +o rules:numerics
(FPCore (J l K U)
  :name "Maksimov and Kolovsky, Equation (4)"
  :precision binary64
  (+ (* (* J (- (exp l) (exp (- l)))) (cos (/ K 2))) U))