Average Error: 17.7 → 0.4
Time: 31.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, \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 r73673 = J;
        double r73674 = l;
        double r73675 = exp(r73674);
        double r73676 = -r73674;
        double r73677 = exp(r73676);
        double r73678 = r73675 - r73677;
        double r73679 = r73673 * r73678;
        double r73680 = K;
        double r73681 = 2.0;
        double r73682 = r73680 / r73681;
        double r73683 = cos(r73682);
        double r73684 = r73679 * r73683;
        double r73685 = U;
        double r73686 = r73684 + r73685;
        return r73686;
}

double f(double J, double l, double K, double U) {
        double r73687 = J;
        double r73688 = 0.3333333333333333;
        double r73689 = l;
        double r73690 = 3.0;
        double r73691 = pow(r73689, r73690);
        double r73692 = 0.016666666666666666;
        double r73693 = 5.0;
        double r73694 = pow(r73689, r73693);
        double r73695 = 2.0;
        double r73696 = r73695 * r73689;
        double r73697 = fma(r73692, r73694, r73696);
        double r73698 = fma(r73688, r73691, r73697);
        double r73699 = K;
        double r73700 = 2.0;
        double r73701 = r73699 / r73700;
        double r73702 = cos(r73701);
        double r73703 = r73698 * r73702;
        double r73704 = U;
        double r73705 = fma(r73687, r73703, r73704);
        return r73705;
}

Error

Bits error versus J

Bits error versus l

Bits error versus K

Bits error versus U

Derivation

  1. Initial program 17.7

    \[\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 2019323 +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))