\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)}\begin{array}{l}
\mathbf{if}\;{\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2} \le 6.255042022075511028897152922160877393 \cdot 10^{-314}:\\
\;\;\;\;\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + 0}}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1}{2} \cdot \left(1 + \frac{\frac{1}{\sqrt[3]{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}} \cdot \sqrt[3]{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}}}{\left(\sqrt[3]{\sqrt[3]{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}} \cdot \sqrt[3]{\sqrt[3]{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}}\right) \cdot \sqrt[3]{\sqrt[3]{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}}}\right)}\\
\end{array}double f(double l, double Om, double kx, double ky) {
double r55580 = 1.0;
double r55581 = 2.0;
double r55582 = r55580 / r55581;
double r55583 = l;
double r55584 = r55581 * r55583;
double r55585 = Om;
double r55586 = r55584 / r55585;
double r55587 = pow(r55586, r55581);
double r55588 = kx;
double r55589 = sin(r55588);
double r55590 = pow(r55589, r55581);
double r55591 = ky;
double r55592 = sin(r55591);
double r55593 = pow(r55592, r55581);
double r55594 = r55590 + r55593;
double r55595 = r55587 * r55594;
double r55596 = r55580 + r55595;
double r55597 = sqrt(r55596);
double r55598 = r55580 / r55597;
double r55599 = r55580 + r55598;
double r55600 = r55582 * r55599;
double r55601 = sqrt(r55600);
return r55601;
}
double f(double l, double Om, double kx, double ky) {
double r55602 = kx;
double r55603 = sin(r55602);
double r55604 = 2.0;
double r55605 = pow(r55603, r55604);
double r55606 = ky;
double r55607 = sin(r55606);
double r55608 = pow(r55607, r55604);
double r55609 = r55605 + r55608;
double r55610 = 6.2550420220755e-314;
bool r55611 = r55609 <= r55610;
double r55612 = 1.0;
double r55613 = r55612 / r55604;
double r55614 = 0.0;
double r55615 = r55612 + r55614;
double r55616 = sqrt(r55615);
double r55617 = r55612 / r55616;
double r55618 = r55612 + r55617;
double r55619 = r55613 * r55618;
double r55620 = sqrt(r55619);
double r55621 = l;
double r55622 = r55604 * r55621;
double r55623 = Om;
double r55624 = r55622 / r55623;
double r55625 = pow(r55624, r55604);
double r55626 = r55625 * r55609;
double r55627 = r55612 + r55626;
double r55628 = sqrt(r55627);
double r55629 = cbrt(r55628);
double r55630 = r55629 * r55629;
double r55631 = r55612 / r55630;
double r55632 = cbrt(r55629);
double r55633 = r55632 * r55632;
double r55634 = r55633 * r55632;
double r55635 = r55631 / r55634;
double r55636 = r55612 + r55635;
double r55637 = r55613 * r55636;
double r55638 = sqrt(r55637);
double r55639 = r55611 ? r55620 : r55638;
return r55639;
}



Bits error versus l



Bits error versus Om



Bits error versus kx



Bits error versus ky
Results
if (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)) < 6.2550420220755e-314Initial program 17.0
Taylor expanded around 0 11.0
if 6.2550420220755e-314 < (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)) Initial program 0.7
rmApplied add-cube-cbrt0.7
Applied associate-/r*0.7
rmApplied add-cube-cbrt0.7
Final simplification1.3
herbie shell --seed 2019347 +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))))))))))