Average Error: 59.3 → 34.5
Time: 2.9m
Precision: 64
\[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
\[\begin{array}{l} \mathbf{if}\;d \le 1.028014946374977112793459567345674978253 \cdot 10^{-41} \lor \neg \left(d \le 1.879132275263087348510262122271649682884 \cdot 10^{52}\right):\\ \;\;\;\;e^{\log 0}\\ \mathbf{else}:\\ \;\;\;\;\frac{c0}{2 \cdot w} \cdot \left(2 \cdot \frac{{d}^{2} \cdot c0}{w \cdot \left({D}^{2} \cdot h\right)}\right)\\ \end{array}\]
\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)
\begin{array}{l}
\mathbf{if}\;d \le 1.028014946374977112793459567345674978253 \cdot 10^{-41} \lor \neg \left(d \le 1.879132275263087348510262122271649682884 \cdot 10^{52}\right):\\
\;\;\;\;e^{\log 0}\\

\mathbf{else}:\\
\;\;\;\;\frac{c0}{2 \cdot w} \cdot \left(2 \cdot \frac{{d}^{2} \cdot c0}{w \cdot \left({D}^{2} \cdot h\right)}\right)\\

\end{array}
double f(double c0, double w, double h, double D, double d, double M) {
        double r87973 = c0;
        double r87974 = 2.0;
        double r87975 = w;
        double r87976 = r87974 * r87975;
        double r87977 = r87973 / r87976;
        double r87978 = d;
        double r87979 = r87978 * r87978;
        double r87980 = r87973 * r87979;
        double r87981 = h;
        double r87982 = r87975 * r87981;
        double r87983 = D;
        double r87984 = r87983 * r87983;
        double r87985 = r87982 * r87984;
        double r87986 = r87980 / r87985;
        double r87987 = r87986 * r87986;
        double r87988 = M;
        double r87989 = r87988 * r87988;
        double r87990 = r87987 - r87989;
        double r87991 = sqrt(r87990);
        double r87992 = r87986 + r87991;
        double r87993 = r87977 * r87992;
        return r87993;
}

double f(double c0, double w, double h, double D, double d, double __attribute__((unused)) M) {
        double r87994 = d;
        double r87995 = 1.0280149463749771e-41;
        bool r87996 = r87994 <= r87995;
        double r87997 = 1.8791322752630873e+52;
        bool r87998 = r87994 <= r87997;
        double r87999 = !r87998;
        bool r88000 = r87996 || r87999;
        double r88001 = 0.0;
        double r88002 = log(r88001);
        double r88003 = exp(r88002);
        double r88004 = c0;
        double r88005 = 2.0;
        double r88006 = w;
        double r88007 = r88005 * r88006;
        double r88008 = r88004 / r88007;
        double r88009 = 2.0;
        double r88010 = pow(r87994, r88009);
        double r88011 = r88010 * r88004;
        double r88012 = D;
        double r88013 = pow(r88012, r88009);
        double r88014 = h;
        double r88015 = r88013 * r88014;
        double r88016 = r88006 * r88015;
        double r88017 = r88011 / r88016;
        double r88018 = r88009 * r88017;
        double r88019 = r88008 * r88018;
        double r88020 = r88000 ? r88003 : r88019;
        return r88020;
}

Error

Bits error versus c0

Bits error versus w

Bits error versus h

Bits error versus D

Bits error versus d

Bits error versus M

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if d < 1.0280149463749771e-41 or 1.8791322752630873e+52 < d

    1. Initial program 59.9

      \[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
    2. Taylor expanded around inf 34.6

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \color{blue}{0}\]
    3. Using strategy rm
    4. Applied add-exp-log34.6

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \color{blue}{e^{\log 0}}\]
    5. Applied add-exp-log48.9

      \[\leadsto \frac{c0}{2 \cdot \color{blue}{e^{\log w}}} \cdot e^{\log 0}\]
    6. Applied add-exp-log48.9

      \[\leadsto \frac{c0}{\color{blue}{e^{\log 2}} \cdot e^{\log w}} \cdot e^{\log 0}\]
    7. Applied prod-exp48.9

      \[\leadsto \frac{c0}{\color{blue}{e^{\log 2 + \log w}}} \cdot e^{\log 0}\]
    8. Applied add-exp-log56.5

      \[\leadsto \frac{\color{blue}{e^{\log c0}}}{e^{\log 2 + \log w}} \cdot e^{\log 0}\]
    9. Applied div-exp56.5

      \[\leadsto \color{blue}{e^{\log c0 - \left(\log 2 + \log w\right)}} \cdot e^{\log 0}\]
    10. Applied prod-exp56.0

      \[\leadsto \color{blue}{e^{\left(\log c0 - \left(\log 2 + \log w\right)\right) + \log 0}}\]
    11. Simplified32.7

      \[\leadsto e^{\color{blue}{\log 0}}\]

    if 1.0280149463749771e-41 < d < 1.8791322752630873e+52

    1. Initial program 52.7

      \[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
    2. Using strategy rm
    3. Applied associate-/l*53.8

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \left(\color{blue}{\frac{c0}{\frac{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}{d \cdot d}}} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
    4. Taylor expanded around inf 54.7

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \color{blue}{\left(2 \cdot \frac{{d}^{2} \cdot c0}{w \cdot \left({D}^{2} \cdot h\right)}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification34.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;d \le 1.028014946374977112793459567345674978253 \cdot 10^{-41} \lor \neg \left(d \le 1.879132275263087348510262122271649682884 \cdot 10^{52}\right):\\ \;\;\;\;e^{\log 0}\\ \mathbf{else}:\\ \;\;\;\;\frac{c0}{2 \cdot w} \cdot \left(2 \cdot \frac{{d}^{2} \cdot c0}{w \cdot \left({D}^{2} \cdot h\right)}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (c0 w h D d M)
  :name "Henrywood and Agarwal, Equation (13)"
  :precision binary64
  (* (/ c0 (* 2 w)) (+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))))