\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}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + \left({\left(\frac{2 \cdot \ell}{Om}\right)}^{\left(\frac{2}{2}\right)} \cdot \sqrt{{\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}}\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{\left(\frac{2}{2}\right)} \cdot \sqrt{{\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}}\right)\right)}}\right)}double f(double l, double Om, double kx, double ky) {
double r57913 = 1.0;
double r57914 = 2.0;
double r57915 = r57913 / r57914;
double r57916 = l;
double r57917 = r57914 * r57916;
double r57918 = Om;
double r57919 = r57917 / r57918;
double r57920 = pow(r57919, r57914);
double r57921 = kx;
double r57922 = sin(r57921);
double r57923 = pow(r57922, r57914);
double r57924 = ky;
double r57925 = sin(r57924);
double r57926 = pow(r57925, r57914);
double r57927 = r57923 + r57926;
double r57928 = r57920 * r57927;
double r57929 = r57913 + r57928;
double r57930 = sqrt(r57929);
double r57931 = r57913 / r57930;
double r57932 = r57913 + r57931;
double r57933 = r57915 * r57932;
double r57934 = sqrt(r57933);
return r57934;
}
double f(double l, double Om, double kx, double ky) {
double r57935 = 1.0;
double r57936 = 2.0;
double r57937 = r57935 / r57936;
double r57938 = l;
double r57939 = r57936 * r57938;
double r57940 = Om;
double r57941 = r57939 / r57940;
double r57942 = 2.0;
double r57943 = r57936 / r57942;
double r57944 = pow(r57941, r57943);
double r57945 = kx;
double r57946 = sin(r57945);
double r57947 = pow(r57946, r57936);
double r57948 = ky;
double r57949 = sin(r57948);
double r57950 = pow(r57949, r57936);
double r57951 = r57947 + r57950;
double r57952 = sqrt(r57951);
double r57953 = r57944 * r57952;
double r57954 = expm1(r57953);
double r57955 = log1p(r57954);
double r57956 = r57953 * r57955;
double r57957 = r57935 + r57956;
double r57958 = sqrt(r57957);
double r57959 = r57935 / r57958;
double r57960 = r57935 + r57959;
double r57961 = r57937 * r57960;
double r57962 = sqrt(r57961);
return r57962;
}



Bits error versus l



Bits error versus Om



Bits error versus kx



Bits error versus ky
Results
Initial program 1.7
rmApplied add-sqr-sqrt1.7
Applied sqr-pow1.7
Applied unswap-sqr1.5
rmApplied log1p-expm1-u1.6
Final simplification1.6
herbie shell --seed 2020056 +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))))))))))