w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}}\begin{array}{l}
\mathbf{if}\;{\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \le 6.11081507052817196513612330776120330556 \cdot 10^{105}:\\
\;\;\;\;\sqrt{1 + \left(h \cdot {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{\left(\frac{2}{2}\right)}\right) \cdot \frac{-{\left(\frac{M \cdot D}{2 \cdot d}\right)}^{\left(\frac{2}{2}\right)}}{\ell}} \cdot w0\\
\mathbf{else}:\\
\;\;\;\;\mathsf{hypot}\left(\frac{{\left(\frac{M \cdot D}{2 \cdot d}\right)}^{\left(\frac{2}{2}\right)}}{\sqrt{\frac{\ell}{-h}}}, \sqrt{1}\right) \cdot w0\\
\end{array}double f(double w0, double M, double D, double h, double l, double d) {
double r165572 = w0;
double r165573 = 1.0;
double r165574 = M;
double r165575 = D;
double r165576 = r165574 * r165575;
double r165577 = 2.0;
double r165578 = d;
double r165579 = r165577 * r165578;
double r165580 = r165576 / r165579;
double r165581 = pow(r165580, r165577);
double r165582 = h;
double r165583 = l;
double r165584 = r165582 / r165583;
double r165585 = r165581 * r165584;
double r165586 = r165573 - r165585;
double r165587 = sqrt(r165586);
double r165588 = r165572 * r165587;
return r165588;
}
double f(double w0, double M, double D, double h, double l, double d) {
double r165589 = M;
double r165590 = D;
double r165591 = r165589 * r165590;
double r165592 = 2.0;
double r165593 = d;
double r165594 = r165592 * r165593;
double r165595 = r165591 / r165594;
double r165596 = pow(r165595, r165592);
double r165597 = 6.110815070528172e+105;
bool r165598 = r165596 <= r165597;
double r165599 = 1.0;
double r165600 = h;
double r165601 = 2.0;
double r165602 = r165592 / r165601;
double r165603 = pow(r165595, r165602);
double r165604 = r165600 * r165603;
double r165605 = -r165603;
double r165606 = l;
double r165607 = r165605 / r165606;
double r165608 = r165604 * r165607;
double r165609 = r165599 + r165608;
double r165610 = sqrt(r165609);
double r165611 = w0;
double r165612 = r165610 * r165611;
double r165613 = -r165600;
double r165614 = r165606 / r165613;
double r165615 = sqrt(r165614);
double r165616 = r165603 / r165615;
double r165617 = sqrt(r165599);
double r165618 = hypot(r165616, r165617);
double r165619 = r165618 * r165611;
double r165620 = r165598 ? r165612 : r165619;
return r165620;
}



Bits error versus w0



Bits error versus M



Bits error versus D



Bits error versus h



Bits error versus l



Bits error versus d
Results
if (pow (/ (* M D) (* 2.0 d)) 2.0) < 6.110815070528172e+105Initial program 5.9
Simplified5.9
rmApplied fma-udef5.9
Simplified5.4
rmApplied div-inv5.4
Applied sqr-pow5.4
Applied times-frac1.0
Simplified1.0
if 6.110815070528172e+105 < (pow (/ (* M D) (* 2.0 d)) 2.0) Initial program 43.6
Simplified43.6
rmApplied fma-udef43.6
Simplified43.5
rmApplied add-sqr-sqrt43.5
Applied add-sqr-sqrt49.0
Applied sqr-pow49.0
Applied times-frac42.8
Applied hypot-def31.6
Final simplification7.7
herbie shell --seed 2019194 +o rules:numerics
(FPCore (w0 M D h l d)
:name "Henrywood and Agarwal, Equation (9a)"
(* w0 (sqrt (- 1.0 (* (pow (/ (* M D) (* 2.0 d)) 2.0) (/ h l))))))