Average Error: 14.2 → 8.9
Time: 1.1min
Precision: binary64
\[[M, D] = \mathsf{sort}([M, D]) \\]
\[w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}} \]
\[\begin{array}{l} t_0 := \frac{M}{\frac{2}{\frac{D}{d}}}\\ w0 \cdot \sqrt{1 - \frac{h \cdot t_0}{\frac{\ell}{t_0}}} \end{array} \]
w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}}
\begin{array}{l}
t_0 := \frac{M}{\frac{2}{\frac{D}{d}}}\\
w0 \cdot \sqrt{1 - \frac{h \cdot t_0}{\frac{\ell}{t_0}}}
\end{array}
(FPCore (w0 M D h l d)
 :precision binary64
 (* w0 (sqrt (- 1.0 (* (pow (/ (* M D) (* 2.0 d)) 2.0) (/ h l))))))
(FPCore (w0 M D h l d)
 :precision binary64
 (let* ((t_0 (/ M (/ 2.0 (/ D d)))))
   (* w0 (sqrt (- 1.0 (/ (* h t_0) (/ l t_0)))))))
double code(double w0, double M, double D, double h, double l, double d) {
	return w0 * sqrt((1.0 - (pow(((M * D) / (2.0 * d)), 2.0) * (h / l))));
}
double code(double w0, double M, double D, double h, double l, double d) {
	double t_0 = M / (2.0 / (D / d));
	return w0 * sqrt((1.0 - ((h * t_0) / (l / t_0))));
}

Error

Bits error versus w0

Bits error versus M

Bits error versus D

Bits error versus h

Bits error versus l

Bits error versus d

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 14.2

    \[w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}} \]
  2. Applied associate-*r/_binary6411.1

    \[\leadsto w0 \cdot \sqrt{1 - \color{blue}{\frac{{\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot h}{\ell}}} \]
  3. Simplified11.1

    \[\leadsto w0 \cdot \sqrt{1 - \frac{\color{blue}{h \cdot {\left(\frac{M}{\frac{2}{\frac{D}{d}}}\right)}^{2}}}{\ell}} \]
    Proof
    (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2) h): 0 points increase in error, 0 points decrease in error
    (Rewrite=> *-commutative_binary64 (*.f64 h (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (Rewrite=> sqr-pow_binary64 (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (/.f64 2 2)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (/.f64 2 2))))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (Rewrite=> metadata-eval 1)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (/.f64 2 2)))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 1) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (Rewrite=> metadata-eval 1)))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 1) (Rewrite=> unpow1_binary64 (/.f64 (*.f64 M D) (*.f64 2 d))))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (Rewrite=> pow-plus_binary64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) (+.f64 1 1)))): 0 points increase in error, 0 points decrease in error
    (*.f64 h (pow.f64 (Rewrite=> associate-/l*_binary64 (/.f64 M (/.f64 (*.f64 2 d) D))) (+.f64 1 1))): 20 points increase in error, 16 points decrease in error
    (*.f64 h (pow.f64 (/.f64 M (Rewrite=> associate-/l*_binary64 (/.f64 2 (/.f64 D d)))) (+.f64 1 1))): 10 points increase in error, 10 points decrease in error
    (*.f64 h (pow.f64 (/.f64 M (/.f64 2 (/.f64 D d))) (Rewrite=> metadata-eval 2))): 0 points increase in error, 0 points decrease in error
  4. Applied unpow2_binary6411.1

    \[\leadsto w0 \cdot \sqrt{1 - \frac{h \cdot \color{blue}{\left(\frac{M}{\frac{2}{\frac{D}{d}}} \cdot \frac{M}{\frac{2}{\frac{D}{d}}}\right)}}{\ell}} \]
  5. Applied associate-*r*_binary649.6

    \[\leadsto w0 \cdot \sqrt{1 - \frac{\color{blue}{\left(h \cdot \frac{M}{\frac{2}{\frac{D}{d}}}\right) \cdot \frac{M}{\frac{2}{\frac{D}{d}}}}}{\ell}} \]
  6. Applied associate-/l*_binary648.9

    \[\leadsto w0 \cdot \sqrt{1 - \color{blue}{\frac{h \cdot \frac{M}{\frac{2}{\frac{D}{d}}}}{\frac{\ell}{\frac{M}{\frac{2}{\frac{D}{d}}}}}}} \]
  7. Final simplification8.9

    \[\leadsto w0 \cdot \sqrt{1 - \frac{h \cdot \frac{M}{\frac{2}{\frac{D}{d}}}}{\frac{\ell}{\frac{M}{\frac{2}{\frac{D}{d}}}}}} \]

Reproduce

herbie shell --seed 2022160 
(FPCore (w0 M D h l d)
  :name "Henrywood and Agarwal, Equation (9a)"
  :precision binary64
  (* w0 (sqrt (- 1.0 (* (pow (/ (* M D) (* 2.0 d)) 2.0) (/ h l))))))