\left({\left(\frac{d}{h}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{d}{\ell}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot \left(1 - \left(\frac{1}{2} \cdot {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2}\right) \cdot \frac{h}{\ell}\right)\begin{array}{l}
\mathbf{if}\;h \le -3.83023767151276997 \cdot 10^{97} \lor \neg \left(h \le 4.5669509591709906 \cdot 10^{-130}\right):\\
\;\;\;\;\left({\left(\frac{1}{\sqrt[3]{h} \cdot \sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{d}{\sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot \left(\left({\left(\frac{\sqrt[3]{d} \cdot \sqrt[3]{d}}{\sqrt[3]{\ell} \cdot \sqrt[3]{\ell}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{\sqrt[3]{d}}{\sqrt[3]{\ell}}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot \left(1 - \frac{\left(1 \cdot {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2}\right) \cdot h}{2 \cdot \ell}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left({\left(\frac{1}{\sqrt[3]{h} \cdot \sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)} \cdot \left({\left(\frac{1}{\sqrt[3]{\sqrt[3]{h}} \cdot \sqrt[3]{\sqrt[3]{h}}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{d}{\sqrt[3]{\sqrt[3]{h}}}\right)}^{\left(\frac{1}{2}\right)}\right)\right) \cdot \left({\left(\frac{\sqrt[3]{d} \cdot \sqrt[3]{d}}{\sqrt[3]{\ell} \cdot \sqrt[3]{\ell}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{\sqrt[3]{d}}{\sqrt[3]{\ell}}\right)}^{\left(\frac{1}{2}\right)}\right)\right) \cdot \left(1 - \left(\frac{1}{2} \cdot {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2}\right) \cdot \frac{h}{\ell}\right)\\
\end{array}double f(double d, double h, double l, double M, double D) {
double r239995 = d;
double r239996 = h;
double r239997 = r239995 / r239996;
double r239998 = 1.0;
double r239999 = 2.0;
double r240000 = r239998 / r239999;
double r240001 = pow(r239997, r240000);
double r240002 = l;
double r240003 = r239995 / r240002;
double r240004 = pow(r240003, r240000);
double r240005 = r240001 * r240004;
double r240006 = M;
double r240007 = D;
double r240008 = r240006 * r240007;
double r240009 = r239999 * r239995;
double r240010 = r240008 / r240009;
double r240011 = pow(r240010, r239999);
double r240012 = r240000 * r240011;
double r240013 = r239996 / r240002;
double r240014 = r240012 * r240013;
double r240015 = r239998 - r240014;
double r240016 = r240005 * r240015;
return r240016;
}
double f(double d, double h, double l, double M, double D) {
double r240017 = h;
double r240018 = -3.83023767151277e+97;
bool r240019 = r240017 <= r240018;
double r240020 = 4.5669509591709906e-130;
bool r240021 = r240017 <= r240020;
double r240022 = !r240021;
bool r240023 = r240019 || r240022;
double r240024 = 1.0;
double r240025 = cbrt(r240017);
double r240026 = r240025 * r240025;
double r240027 = r240024 / r240026;
double r240028 = 1.0;
double r240029 = 2.0;
double r240030 = r240028 / r240029;
double r240031 = pow(r240027, r240030);
double r240032 = d;
double r240033 = r240032 / r240025;
double r240034 = pow(r240033, r240030);
double r240035 = r240031 * r240034;
double r240036 = cbrt(r240032);
double r240037 = r240036 * r240036;
double r240038 = l;
double r240039 = cbrt(r240038);
double r240040 = r240039 * r240039;
double r240041 = r240037 / r240040;
double r240042 = pow(r240041, r240030);
double r240043 = r240036 / r240039;
double r240044 = pow(r240043, r240030);
double r240045 = r240042 * r240044;
double r240046 = M;
double r240047 = D;
double r240048 = r240046 * r240047;
double r240049 = r240029 * r240032;
double r240050 = r240048 / r240049;
double r240051 = pow(r240050, r240029);
double r240052 = r240028 * r240051;
double r240053 = r240052 * r240017;
double r240054 = r240029 * r240038;
double r240055 = r240053 / r240054;
double r240056 = r240028 - r240055;
double r240057 = r240045 * r240056;
double r240058 = r240035 * r240057;
double r240059 = cbrt(r240025);
double r240060 = r240059 * r240059;
double r240061 = r240024 / r240060;
double r240062 = pow(r240061, r240030);
double r240063 = r240032 / r240059;
double r240064 = pow(r240063, r240030);
double r240065 = r240062 * r240064;
double r240066 = r240031 * r240065;
double r240067 = r240066 * r240045;
double r240068 = r240030 * r240051;
double r240069 = r240017 / r240038;
double r240070 = r240068 * r240069;
double r240071 = r240028 - r240070;
double r240072 = r240067 * r240071;
double r240073 = r240023 ? r240058 : r240072;
return r240073;
}



Bits error versus d



Bits error versus h



Bits error versus l



Bits error versus M



Bits error versus D
Results
if h < -3.83023767151277e+97 or 4.5669509591709906e-130 < h Initial program 25.8
rmApplied add-cube-cbrt26.0
Applied *-un-lft-identity26.0
Applied times-frac26.0
Applied unpow-prod-down24.2
rmApplied add-cube-cbrt24.3
Applied add-cube-cbrt24.4
Applied times-frac24.4
Applied unpow-prod-down21.2
rmApplied associate-*l/21.2
Applied frac-times16.5
rmApplied associate-*l*16.7
if -3.83023767151277e+97 < h < 4.5669509591709906e-130Initial program 28.3
rmApplied add-cube-cbrt28.6
Applied *-un-lft-identity28.6
Applied times-frac28.6
Applied unpow-prod-down20.1
rmApplied add-cube-cbrt20.2
Applied add-cube-cbrt20.3
Applied times-frac20.3
Applied unpow-prod-down15.2
rmApplied add-cube-cbrt15.3
Applied *-un-lft-identity15.3
Applied times-frac15.3
Applied unpow-prod-down14.1
Final simplification15.5
herbie shell --seed 2020035
(FPCore (d h l M D)
:name "Henrywood and Agarwal, Equation (12)"
:precision binary64
(* (* (pow (/ d h) (/ 1 2)) (pow (/ d l) (/ 1 2))) (- 1 (* (* (/ 1 2) (pow (/ (* M D) (* 2 d)) 2)) (/ h l)))))