\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}\;\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) \le -3.045394342973040561697090879356737929553 \cdot 10^{-180}:\\
\;\;\;\;\left(\left({\left(\frac{\sqrt[3]{d} \cdot \sqrt[3]{d}}{\sqrt[3]{h} \cdot \sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{\sqrt[3]{d}}{\sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot {\left(\frac{d}{\ell}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot \left(1 - \left(\frac{1}{2} \cdot {\left(\frac{M}{2} \cdot \frac{D}{d}\right)}^{2}\right) \cdot \frac{h}{\ell}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left({\left(\frac{\sqrt[3]{d} \cdot \sqrt[3]{d}}{\sqrt[3]{h} \cdot \sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)} \cdot {\left(\frac{\sqrt[3]{d}}{\sqrt[3]{h}}\right)}^{\left(\frac{1}{2}\right)}\right) \cdot \left({\left(\sqrt[3]{d} \cdot \sqrt[3]{d}\right)}^{\left(\frac{1}{2}\right)} \cdot \left({\left(\frac{1}{\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)\right) \cdot \left(1 - \left(\left(\frac{1}{2} \cdot {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2}\right) \cdot h\right) \cdot \frac{1}{\ell}\right)\\
\end{array}double f(double d, double h, double l, double M, double D) {
double r152433 = d;
double r152434 = h;
double r152435 = r152433 / r152434;
double r152436 = 1.0;
double r152437 = 2.0;
double r152438 = r152436 / r152437;
double r152439 = pow(r152435, r152438);
double r152440 = l;
double r152441 = r152433 / r152440;
double r152442 = pow(r152441, r152438);
double r152443 = r152439 * r152442;
double r152444 = M;
double r152445 = D;
double r152446 = r152444 * r152445;
double r152447 = r152437 * r152433;
double r152448 = r152446 / r152447;
double r152449 = pow(r152448, r152437);
double r152450 = r152438 * r152449;
double r152451 = r152434 / r152440;
double r152452 = r152450 * r152451;
double r152453 = r152436 - r152452;
double r152454 = r152443 * r152453;
return r152454;
}
double f(double d, double h, double l, double M, double D) {
double r152455 = d;
double r152456 = h;
double r152457 = r152455 / r152456;
double r152458 = 1.0;
double r152459 = 2.0;
double r152460 = r152458 / r152459;
double r152461 = pow(r152457, r152460);
double r152462 = l;
double r152463 = r152455 / r152462;
double r152464 = pow(r152463, r152460);
double r152465 = r152461 * r152464;
double r152466 = M;
double r152467 = D;
double r152468 = r152466 * r152467;
double r152469 = r152459 * r152455;
double r152470 = r152468 / r152469;
double r152471 = pow(r152470, r152459);
double r152472 = r152460 * r152471;
double r152473 = r152456 / r152462;
double r152474 = r152472 * r152473;
double r152475 = r152458 - r152474;
double r152476 = r152465 * r152475;
double r152477 = -3.0453943429730406e-180;
bool r152478 = r152476 <= r152477;
double r152479 = cbrt(r152455);
double r152480 = r152479 * r152479;
double r152481 = cbrt(r152456);
double r152482 = r152481 * r152481;
double r152483 = r152480 / r152482;
double r152484 = pow(r152483, r152460);
double r152485 = r152479 / r152481;
double r152486 = pow(r152485, r152460);
double r152487 = r152484 * r152486;
double r152488 = r152487 * r152464;
double r152489 = r152466 / r152459;
double r152490 = r152467 / r152455;
double r152491 = r152489 * r152490;
double r152492 = pow(r152491, r152459);
double r152493 = r152460 * r152492;
double r152494 = r152493 * r152473;
double r152495 = r152458 - r152494;
double r152496 = r152488 * r152495;
double r152497 = pow(r152480, r152460);
double r152498 = 1.0;
double r152499 = cbrt(r152462);
double r152500 = r152499 * r152499;
double r152501 = r152498 / r152500;
double r152502 = pow(r152501, r152460);
double r152503 = r152479 / r152499;
double r152504 = pow(r152503, r152460);
double r152505 = r152502 * r152504;
double r152506 = r152497 * r152505;
double r152507 = r152487 * r152506;
double r152508 = r152472 * r152456;
double r152509 = r152498 / r152462;
double r152510 = r152508 * r152509;
double r152511 = r152458 - r152510;
double r152512 = r152507 * r152511;
double r152513 = r152478 ? r152496 : r152512;
return r152513;
}



Bits error versus d



Bits error versus h



Bits error versus l



Bits error versus M



Bits error versus D
Results
if (* (* (pow (/ d h) (/ 1.0 2.0)) (pow (/ d l) (/ 1.0 2.0))) (- 1.0 (* (* (/ 1.0 2.0) (pow (/ (* M D) (* 2.0 d)) 2.0)) (/ h l)))) < -3.0453943429730406e-180Initial program 28.5
rmApplied add-cube-cbrt28.7
Applied add-cube-cbrt28.8
Applied times-frac28.8
Applied unpow-prod-down28.5
rmApplied times-frac29.8
if -3.0453943429730406e-180 < (* (* (pow (/ d h) (/ 1.0 2.0)) (pow (/ d l) (/ 1.0 2.0))) (- 1.0 (* (* (/ 1.0 2.0) (pow (/ (* M D) (* 2.0 d)) 2.0)) (/ h l)))) Initial program 27.1
rmApplied add-cube-cbrt27.4
Applied add-cube-cbrt27.5
Applied times-frac27.5
Applied unpow-prod-down21.0
rmApplied *-un-lft-identity21.0
Applied add-cube-cbrt21.2
Applied times-frac21.2
Applied unpow-prod-down17.0
Simplified17.0
rmApplied div-inv17.0
Applied associate-*r*14.0
rmApplied add-cube-cbrt14.1
Applied *-un-lft-identity14.1
Applied cbrt-prod14.1
Applied times-frac14.1
Applied unpow-prod-down12.5
Simplified12.5
Final simplification15.6
herbie shell --seed 2019303 +o rules:numerics
(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)))))