Average Error: 1.8 → 1.9
Time: 15.1s
Precision: 64
\[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}\]
\[\sqrt{\left(\frac{1}{\sqrt{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2}, {\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}, 1\right)\right)\right)}} + 1\right) \cdot \frac{1}{2}}\]
\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}
\sqrt{\left(\frac{1}{\sqrt{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2}, {\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}, 1\right)\right)\right)}} + 1\right) \cdot \frac{1}{2}}
double f(double l, double Om, double kx, double ky) {
        double r53725 = 1.0;
        double r53726 = 2.0;
        double r53727 = r53725 / r53726;
        double r53728 = l;
        double r53729 = r53726 * r53728;
        double r53730 = Om;
        double r53731 = r53729 / r53730;
        double r53732 = pow(r53731, r53726);
        double r53733 = kx;
        double r53734 = sin(r53733);
        double r53735 = pow(r53734, r53726);
        double r53736 = ky;
        double r53737 = sin(r53736);
        double r53738 = pow(r53737, r53726);
        double r53739 = r53735 + r53738;
        double r53740 = r53732 * r53739;
        double r53741 = r53725 + r53740;
        double r53742 = sqrt(r53741);
        double r53743 = r53725 / r53742;
        double r53744 = r53725 + r53743;
        double r53745 = r53727 * r53744;
        double r53746 = sqrt(r53745);
        return r53746;
}

double f(double l, double Om, double kx, double ky) {
        double r53747 = 1.0;
        double r53748 = 2.0;
        double r53749 = l;
        double r53750 = r53748 * r53749;
        double r53751 = Om;
        double r53752 = r53750 / r53751;
        double r53753 = pow(r53752, r53748);
        double r53754 = kx;
        double r53755 = sin(r53754);
        double r53756 = pow(r53755, r53748);
        double r53757 = ky;
        double r53758 = sin(r53757);
        double r53759 = pow(r53758, r53748);
        double r53760 = r53756 + r53759;
        double r53761 = fma(r53753, r53760, r53747);
        double r53762 = expm1(r53761);
        double r53763 = log1p(r53762);
        double r53764 = sqrt(r53763);
        double r53765 = r53747 / r53764;
        double r53766 = r53765 + r53747;
        double r53767 = r53747 / r53748;
        double r53768 = r53766 * r53767;
        double r53769 = sqrt(r53768);
        return r53769;
}

Error

Bits error versus l

Bits error versus Om

Bits error versus kx

Bits error versus ky

Derivation

  1. Initial program 1.8

    \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}\]
  2. Simplified1.8

    \[\leadsto \color{blue}{\sqrt{\left(\frac{1}{\sqrt{\mathsf{fma}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2}, {\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}, 1\right)}} + 1\right) \cdot \frac{1}{2}}}\]
  3. Using strategy rm
  4. Applied log1p-expm1-u1.9

    \[\leadsto \sqrt{\left(\frac{1}{\sqrt{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2}, {\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}, 1\right)\right)\right)}}} + 1\right) \cdot \frac{1}{2}}\]
  5. Final simplification1.9

    \[\leadsto \sqrt{\left(\frac{1}{\sqrt{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2}, {\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}, 1\right)\right)\right)}} + 1\right) \cdot \frac{1}{2}}\]

Reproduce

herbie shell --seed 2020047 +o rules:numerics
(FPCore (l Om kx ky)
  :name "Toniolo and Linder, Equation (3a)"
  :precision binary64
  (sqrt (* (/ 1 2) (+ 1 (/ 1 (sqrt (+ 1 (* (pow (/ (* 2 l) Om) 2) (+ (pow (sin kx) 2) (pow (sin ky) 2))))))))))