Average Error: 1.5 → 1.5
Time: 9.6s
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{1}{\frac{2}{\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}}}\]
\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{1}{\frac{2}{\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}}}
double f(double l, double Om, double kx, double ky) {
        double r32062 = 1.0;
        double r32063 = 2.0;
        double r32064 = r32062 / r32063;
        double r32065 = l;
        double r32066 = r32063 * r32065;
        double r32067 = Om;
        double r32068 = r32066 / r32067;
        double r32069 = pow(r32068, r32063);
        double r32070 = kx;
        double r32071 = sin(r32070);
        double r32072 = pow(r32071, r32063);
        double r32073 = ky;
        double r32074 = sin(r32073);
        double r32075 = pow(r32074, r32063);
        double r32076 = r32072 + r32075;
        double r32077 = r32069 * r32076;
        double r32078 = r32062 + r32077;
        double r32079 = sqrt(r32078);
        double r32080 = r32062 / r32079;
        double r32081 = r32062 + r32080;
        double r32082 = r32064 * r32081;
        double r32083 = sqrt(r32082);
        return r32083;
}

double f(double l, double Om, double kx, double ky) {
        double r32084 = 1.0;
        double r32085 = 2.0;
        double r32086 = l;
        double r32087 = r32085 * r32086;
        double r32088 = Om;
        double r32089 = r32087 / r32088;
        double r32090 = pow(r32089, r32085);
        double r32091 = kx;
        double r32092 = sin(r32091);
        double r32093 = pow(r32092, r32085);
        double r32094 = ky;
        double r32095 = sin(r32094);
        double r32096 = pow(r32095, r32085);
        double r32097 = r32093 + r32096;
        double r32098 = fma(r32090, r32097, r32084);
        double r32099 = sqrt(r32098);
        double r32100 = r32084 / r32099;
        double r32101 = r32100 + r32084;
        double r32102 = r32085 / r32101;
        double r32103 = r32084 / r32102;
        double r32104 = sqrt(r32103);
        return r32104;
}

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}{\frac{2}{\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}}}}\]
  3. Final simplification1.5

    \[\leadsto \sqrt{\frac{1}{\frac{2}{\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}}}\]

Reproduce

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