Average Error: 1.7 → 1.7
Time: 13.9s
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 r27023 = 1.0;
        double r27024 = 2.0;
        double r27025 = r27023 / r27024;
        double r27026 = l;
        double r27027 = r27024 * r27026;
        double r27028 = Om;
        double r27029 = r27027 / r27028;
        double r27030 = pow(r27029, r27024);
        double r27031 = kx;
        double r27032 = sin(r27031);
        double r27033 = pow(r27032, r27024);
        double r27034 = ky;
        double r27035 = sin(r27034);
        double r27036 = pow(r27035, r27024);
        double r27037 = r27033 + r27036;
        double r27038 = r27030 * r27037;
        double r27039 = r27023 + r27038;
        double r27040 = sqrt(r27039);
        double r27041 = r27023 / r27040;
        double r27042 = r27023 + r27041;
        double r27043 = r27025 * r27042;
        double r27044 = sqrt(r27043);
        return r27044;
}

double f(double l, double Om, double kx, double ky) {
        double r27045 = 1.0;
        double r27046 = 2.0;
        double r27047 = l;
        double r27048 = r27046 * r27047;
        double r27049 = Om;
        double r27050 = r27048 / r27049;
        double r27051 = pow(r27050, r27046);
        double r27052 = kx;
        double r27053 = sin(r27052);
        double r27054 = pow(r27053, r27046);
        double r27055 = ky;
        double r27056 = sin(r27055);
        double r27057 = pow(r27056, r27046);
        double r27058 = r27054 + r27057;
        double r27059 = fma(r27051, r27058, r27045);
        double r27060 = sqrt(r27059);
        double r27061 = r27045 / r27060;
        double r27062 = r27061 + r27045;
        double r27063 = r27046 / r27062;
        double r27064 = r27045 / r27063;
        double r27065 = sqrt(r27064);
        return r27065;
}

Error

Bits error versus l

Bits error versus Om

Bits error versus kx

Bits error versus ky

Derivation

  1. Initial program 1.7

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

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

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