Average Error: 1.5 → 1.5
Time: 27.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{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\ell}{\frac{Om}{2}} \cdot \frac{\ell}{\frac{Om}{2}}, \mathsf{fma}\left(\sin ky, \sin ky, \sin kx \cdot \sin kx\right), 1\right)}} + \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{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\ell}{\frac{Om}{2}} \cdot \frac{\ell}{\frac{Om}{2}}, \mathsf{fma}\left(\sin ky, \sin ky, \sin kx \cdot \sin kx\right), 1\right)}} + \frac{1}{2}}
double f(double l, double Om, double kx, double ky) {
        double r1221948 = 1.0;
        double r1221949 = 2.0;
        double r1221950 = r1221948 / r1221949;
        double r1221951 = l;
        double r1221952 = r1221949 * r1221951;
        double r1221953 = Om;
        double r1221954 = r1221952 / r1221953;
        double r1221955 = pow(r1221954, r1221949);
        double r1221956 = kx;
        double r1221957 = sin(r1221956);
        double r1221958 = pow(r1221957, r1221949);
        double r1221959 = ky;
        double r1221960 = sin(r1221959);
        double r1221961 = pow(r1221960, r1221949);
        double r1221962 = r1221958 + r1221961;
        double r1221963 = r1221955 * r1221962;
        double r1221964 = r1221948 + r1221963;
        double r1221965 = sqrt(r1221964);
        double r1221966 = r1221948 / r1221965;
        double r1221967 = r1221948 + r1221966;
        double r1221968 = r1221950 * r1221967;
        double r1221969 = sqrt(r1221968);
        return r1221969;
}

double f(double l, double Om, double kx, double ky) {
        double r1221970 = 0.5;
        double r1221971 = l;
        double r1221972 = Om;
        double r1221973 = 2.0;
        double r1221974 = r1221972 / r1221973;
        double r1221975 = r1221971 / r1221974;
        double r1221976 = r1221975 * r1221975;
        double r1221977 = ky;
        double r1221978 = sin(r1221977);
        double r1221979 = kx;
        double r1221980 = sin(r1221979);
        double r1221981 = r1221980 * r1221980;
        double r1221982 = fma(r1221978, r1221978, r1221981);
        double r1221983 = 1.0;
        double r1221984 = fma(r1221976, r1221982, r1221983);
        double r1221985 = sqrt(r1221984);
        double r1221986 = r1221970 / r1221985;
        double r1221987 = r1221986 + r1221970;
        double r1221988 = sqrt(r1221987);
        return r1221988;
}

Error

Bits error versus l

Bits error versus Om

Bits error versus kx

Bits error versus ky

Derivation

  1. Initial program 1.5

    \[\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.5

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

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

Reproduce

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