\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;
}



Bits error versus l



Bits error versus Om



Bits error versus kx



Bits error versus ky
Initial program 1.8
Simplified1.8
rmApplied log1p-expm1-u1.9
Final simplification1.9
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))))))))))