Average Error: 17.8 → 0.4
Time: 47.8s
Precision: 64
\[\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
\[J \cdot \left(\mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right) \cdot \cos \left(\frac{K}{2}\right)\right) + U\]
\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U
J \cdot \left(\mathsf{fma}\left(\frac{1}{3}, {\ell}^{3}, \mathsf{fma}\left(\frac{1}{60}, {\ell}^{5}, 2 \cdot \ell\right)\right) \cdot \cos \left(\frac{K}{2}\right)\right) + U
double f(double J, double l, double K, double U) {
        double r86010 = J;
        double r86011 = l;
        double r86012 = exp(r86011);
        double r86013 = -r86011;
        double r86014 = exp(r86013);
        double r86015 = r86012 - r86014;
        double r86016 = r86010 * r86015;
        double r86017 = K;
        double r86018 = 2.0;
        double r86019 = r86017 / r86018;
        double r86020 = cos(r86019);
        double r86021 = r86016 * r86020;
        double r86022 = U;
        double r86023 = r86021 + r86022;
        return r86023;
}

double f(double J, double l, double K, double U) {
        double r86024 = J;
        double r86025 = 0.3333333333333333;
        double r86026 = l;
        double r86027 = 3.0;
        double r86028 = pow(r86026, r86027);
        double r86029 = 0.016666666666666666;
        double r86030 = 5.0;
        double r86031 = pow(r86026, r86030);
        double r86032 = 2.0;
        double r86033 = r86032 * r86026;
        double r86034 = fma(r86029, r86031, r86033);
        double r86035 = fma(r86025, r86028, r86034);
        double r86036 = K;
        double r86037 = 2.0;
        double r86038 = r86036 / r86037;
        double r86039 = cos(r86038);
        double r86040 = r86035 * r86039;
        double r86041 = r86024 * r86040;
        double r86042 = U;
        double r86043 = r86041 + r86042;
        return r86043;
}

Error

Bits error versus J

Bits error versus l

Bits error versus K

Bits error versus U

Derivation

  1. Initial program 17.8

    \[\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
  2. Taylor expanded around 0 0.4

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

    \[\leadsto \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)}\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
  4. Using strategy rm
  5. Applied associate-*l*0.4

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

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

Reproduce

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