Average Error: 17.1 → 0.4
Time: 50.8s
Precision: 64
\[\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U\]
\[\mathsf{fma}\left(J, \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), U\right)\]
\left(J \cdot \left(e^{\ell} - e^{-\ell}\right)\right) \cdot \cos \left(\frac{K}{2}\right) + U
\mathsf{fma}\left(J, \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), U\right)
double f(double J, double l, double K, double U) {
        double r72965 = J;
        double r72966 = l;
        double r72967 = exp(r72966);
        double r72968 = -r72966;
        double r72969 = exp(r72968);
        double r72970 = r72967 - r72969;
        double r72971 = r72965 * r72970;
        double r72972 = K;
        double r72973 = 2.0;
        double r72974 = r72972 / r72973;
        double r72975 = cos(r72974);
        double r72976 = r72971 * r72975;
        double r72977 = U;
        double r72978 = r72976 + r72977;
        return r72978;
}

double f(double J, double l, double K, double U) {
        double r72979 = J;
        double r72980 = 0.3333333333333333;
        double r72981 = l;
        double r72982 = 3.0;
        double r72983 = pow(r72981, r72982);
        double r72984 = 0.016666666666666666;
        double r72985 = 5.0;
        double r72986 = pow(r72981, r72985);
        double r72987 = 2.0;
        double r72988 = r72987 * r72981;
        double r72989 = fma(r72984, r72986, r72988);
        double r72990 = fma(r72980, r72983, r72989);
        double r72991 = K;
        double r72992 = 2.0;
        double r72993 = r72991 / r72992;
        double r72994 = cos(r72993);
        double r72995 = r72990 * r72994;
        double r72996 = U;
        double r72997 = fma(r72979, r72995, r72996);
        return r72997;
}

Error

Bits error versus J

Bits error versus l

Bits error versus K

Bits error versus U

Derivation

  1. Initial program 17.1

    \[\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. Using strategy rm
  7. Applied fma-def0.4

    \[\leadsto \color{blue}{\mathsf{fma}\left(J, \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), U\right)}\]
  8. Final simplification0.4

    \[\leadsto \mathsf{fma}\left(J, \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), U\right)\]

Reproduce

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