\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}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt{1 + {\left(\left(\sqrt[3]{\frac{2}{\sqrt[3]{Om} \cdot \sqrt[3]{Om}}} \cdot \sqrt[3]{\frac{\ell}{\sqrt[3]{Om}}}\right) \cdot \sqrt[3]{\frac{2 \cdot \ell}{Om}}\right)}^{2} \cdot \left({\left(\sqrt[3]{\frac{2 \cdot \ell}{Om}}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)\right)}\right)\right)}\right)}double f(double l, double Om, double kx, double ky) {
double r53202 = 1.0;
double r53203 = 2.0;
double r53204 = r53202 / r53203;
double r53205 = l;
double r53206 = r53203 * r53205;
double r53207 = Om;
double r53208 = r53206 / r53207;
double r53209 = pow(r53208, r53203);
double r53210 = kx;
double r53211 = sin(r53210);
double r53212 = pow(r53211, r53203);
double r53213 = ky;
double r53214 = sin(r53213);
double r53215 = pow(r53214, r53203);
double r53216 = r53212 + r53215;
double r53217 = r53209 * r53216;
double r53218 = r53202 + r53217;
double r53219 = sqrt(r53218);
double r53220 = r53202 / r53219;
double r53221 = r53202 + r53220;
double r53222 = r53204 * r53221;
double r53223 = sqrt(r53222);
return r53223;
}
double f(double l, double Om, double kx, double ky) {
double r53224 = 1.0;
double r53225 = 2.0;
double r53226 = r53224 / r53225;
double r53227 = Om;
double r53228 = cbrt(r53227);
double r53229 = r53228 * r53228;
double r53230 = r53225 / r53229;
double r53231 = cbrt(r53230);
double r53232 = l;
double r53233 = r53232 / r53228;
double r53234 = cbrt(r53233);
double r53235 = r53231 * r53234;
double r53236 = r53225 * r53232;
double r53237 = r53236 / r53227;
double r53238 = cbrt(r53237);
double r53239 = r53235 * r53238;
double r53240 = pow(r53239, r53225);
double r53241 = pow(r53238, r53225);
double r53242 = kx;
double r53243 = sin(r53242);
double r53244 = pow(r53243, r53225);
double r53245 = ky;
double r53246 = sin(r53245);
double r53247 = pow(r53246, r53225);
double r53248 = r53244 + r53247;
double r53249 = r53241 * r53248;
double r53250 = r53240 * r53249;
double r53251 = r53224 + r53250;
double r53252 = sqrt(r53251);
double r53253 = expm1(r53252);
double r53254 = log1p(r53253);
double r53255 = r53224 / r53254;
double r53256 = r53224 + r53255;
double r53257 = r53226 * r53256;
double r53258 = sqrt(r53257);
return r53258;
}



Bits error versus l



Bits error versus Om



Bits error versus kx



Bits error versus ky
Results
Initial program 1.8
rmApplied add-cube-cbrt1.8
Applied unpow-prod-down1.8
Applied associate-*l*1.6
rmApplied log1p-expm1-u1.6
rmApplied add-cube-cbrt1.6
Applied times-frac1.6
Applied cbrt-prod1.6
Final simplification1.6
herbie shell --seed 2020034 +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))))))))))