| Alternative 1 | |
|---|---|
| Accuracy | 91.6% |
| Cost | 20036 |

(FPCore (c0 A V l) :precision binary64 (* c0 (sqrt (/ A (* V l)))))
(FPCore (c0 A V l)
:precision binary64
(if (<= (* V l) -4e-287)
(* c0 (/ (/ (sqrt (- A)) (sqrt (- V))) (sqrt l)))
(if (<= (* V l) 4e-307)
(/ c0 (sqrt (/ 1.0 (/ (/ A V) l))))
(if (<= (* V l) 2e+274)
(* c0 (* (sqrt A) (pow (* V l) -0.5)))
(/ c0 (sqrt (* V (/ l A))))))))double code(double c0, double A, double V, double l) {
return c0 * sqrt((A / (V * l)));
}
double code(double c0, double A, double V, double l) {
double tmp;
if ((V * l) <= -4e-287) {
tmp = c0 * ((sqrt(-A) / sqrt(-V)) / sqrt(l));
} else if ((V * l) <= 4e-307) {
tmp = c0 / sqrt((1.0 / ((A / V) / l)));
} else if ((V * l) <= 2e+274) {
tmp = c0 * (sqrt(A) * pow((V * l), -0.5));
} else {
tmp = c0 / sqrt((V * (l / A)));
}
return tmp;
}
real(8) function code(c0, a, v, l)
real(8), intent (in) :: c0
real(8), intent (in) :: a
real(8), intent (in) :: v
real(8), intent (in) :: l
code = c0 * sqrt((a / (v * l)))
end function
real(8) function code(c0, a, v, l)
real(8), intent (in) :: c0
real(8), intent (in) :: a
real(8), intent (in) :: v
real(8), intent (in) :: l
real(8) :: tmp
if ((v * l) <= (-4d-287)) then
tmp = c0 * ((sqrt(-a) / sqrt(-v)) / sqrt(l))
else if ((v * l) <= 4d-307) then
tmp = c0 / sqrt((1.0d0 / ((a / v) / l)))
else if ((v * l) <= 2d+274) then
tmp = c0 * (sqrt(a) * ((v * l) ** (-0.5d0)))
else
tmp = c0 / sqrt((v * (l / a)))
end if
code = tmp
end function
public static double code(double c0, double A, double V, double l) {
return c0 * Math.sqrt((A / (V * l)));
}
public static double code(double c0, double A, double V, double l) {
double tmp;
if ((V * l) <= -4e-287) {
tmp = c0 * ((Math.sqrt(-A) / Math.sqrt(-V)) / Math.sqrt(l));
} else if ((V * l) <= 4e-307) {
tmp = c0 / Math.sqrt((1.0 / ((A / V) / l)));
} else if ((V * l) <= 2e+274) {
tmp = c0 * (Math.sqrt(A) * Math.pow((V * l), -0.5));
} else {
tmp = c0 / Math.sqrt((V * (l / A)));
}
return tmp;
}
def code(c0, A, V, l): return c0 * math.sqrt((A / (V * l)))
def code(c0, A, V, l): tmp = 0 if (V * l) <= -4e-287: tmp = c0 * ((math.sqrt(-A) / math.sqrt(-V)) / math.sqrt(l)) elif (V * l) <= 4e-307: tmp = c0 / math.sqrt((1.0 / ((A / V) / l))) elif (V * l) <= 2e+274: tmp = c0 * (math.sqrt(A) * math.pow((V * l), -0.5)) else: tmp = c0 / math.sqrt((V * (l / A))) return tmp
function code(c0, A, V, l) return Float64(c0 * sqrt(Float64(A / Float64(V * l)))) end
function code(c0, A, V, l) tmp = 0.0 if (Float64(V * l) <= -4e-287) tmp = Float64(c0 * Float64(Float64(sqrt(Float64(-A)) / sqrt(Float64(-V))) / sqrt(l))); elseif (Float64(V * l) <= 4e-307) tmp = Float64(c0 / sqrt(Float64(1.0 / Float64(Float64(A / V) / l)))); elseif (Float64(V * l) <= 2e+274) tmp = Float64(c0 * Float64(sqrt(A) * (Float64(V * l) ^ -0.5))); else tmp = Float64(c0 / sqrt(Float64(V * Float64(l / A)))); end return tmp end
function tmp = code(c0, A, V, l) tmp = c0 * sqrt((A / (V * l))); end
function tmp_2 = code(c0, A, V, l) tmp = 0.0; if ((V * l) <= -4e-287) tmp = c0 * ((sqrt(-A) / sqrt(-V)) / sqrt(l)); elseif ((V * l) <= 4e-307) tmp = c0 / sqrt((1.0 / ((A / V) / l))); elseif ((V * l) <= 2e+274) tmp = c0 * (sqrt(A) * ((V * l) ^ -0.5)); else tmp = c0 / sqrt((V * (l / A))); end tmp_2 = tmp; end
code[c0_, A_, V_, l_] := N[(c0 * N[Sqrt[N[(A / N[(V * l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[c0_, A_, V_, l_] := If[LessEqual[N[(V * l), $MachinePrecision], -4e-287], N[(c0 * N[(N[(N[Sqrt[(-A)], $MachinePrecision] / N[Sqrt[(-V)], $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(V * l), $MachinePrecision], 4e-307], N[(c0 / N[Sqrt[N[(1.0 / N[(N[(A / V), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(V * l), $MachinePrecision], 2e+274], N[(c0 * N[(N[Sqrt[A], $MachinePrecision] * N[Power[N[(V * l), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(c0 / N[Sqrt[N[(V * N[(l / A), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
c0 \cdot \sqrt{\frac{A}{V \cdot \ell}}
\begin{array}{l}
\mathbf{if}\;V \cdot \ell \leq -4 \cdot 10^{-287}:\\
\;\;\;\;c0 \cdot \frac{\frac{\sqrt{-A}}{\sqrt{-V}}}{\sqrt{\ell}}\\
\mathbf{elif}\;V \cdot \ell \leq 4 \cdot 10^{-307}:\\
\;\;\;\;\frac{c0}{\sqrt{\frac{1}{\frac{\frac{A}{V}}{\ell}}}}\\
\mathbf{elif}\;V \cdot \ell \leq 2 \cdot 10^{+274}:\\
\;\;\;\;c0 \cdot \left(\sqrt{A} \cdot {\left(V \cdot \ell\right)}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{c0}{\sqrt{V \cdot \frac{\ell}{A}}}\\
\end{array}
Herbie found 12 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
if (*.f64 V l) < -4.00000000000000009e-287Initial program 77.2%
Applied egg-rr44.1%
[Start]77.2% | \[ c0 \cdot \sqrt{\frac{A}{V \cdot \ell}}
\] |
|---|---|
associate-/r* [=>]75.2% | \[ c0 \cdot \sqrt{\color{blue}{\frac{\frac{A}{V}}{\ell}}}
\] |
sqrt-div [=>]44.1% | \[ c0 \cdot \color{blue}{\frac{\sqrt{\frac{A}{V}}}{\sqrt{\ell}}}
\] |
Applied egg-rr47.6%
[Start]44.1% | \[ c0 \cdot \frac{\sqrt{\frac{A}{V}}}{\sqrt{\ell}}
\] |
|---|---|
frac-2neg [=>]44.1% | \[ c0 \cdot \frac{\sqrt{\color{blue}{\frac{-A}{-V}}}}{\sqrt{\ell}}
\] |
sqrt-div [=>]47.6% | \[ c0 \cdot \frac{\color{blue}{\frac{\sqrt{-A}}{\sqrt{-V}}}}{\sqrt{\ell}}
\] |
if -4.00000000000000009e-287 < (*.f64 V l) < 3.99999999999999964e-307Initial program 56.1%
Applied egg-rr77.4%
[Start]56.1% | \[ c0 \cdot \sqrt{\frac{A}{V \cdot \ell}}
\] |
|---|---|
*-un-lft-identity [=>]56.1% | \[ c0 \cdot \sqrt{\frac{\color{blue}{1 \cdot A}}{V \cdot \ell}}
\] |
times-frac [=>]77.4% | \[ c0 \cdot \sqrt{\color{blue}{\frac{1}{V} \cdot \frac{A}{\ell}}}
\] |
Applied egg-rr77.4%
[Start]77.4% | \[ c0 \cdot \sqrt{\frac{1}{V} \cdot \frac{A}{\ell}}
\] |
|---|---|
*-commutative [=>]77.4% | \[ c0 \cdot \sqrt{\color{blue}{\frac{A}{\ell} \cdot \frac{1}{V}}}
\] |
associate-*l/ [=>]77.4% | \[ c0 \cdot \sqrt{\color{blue}{\frac{A \cdot \frac{1}{V}}{\ell}}}
\] |
div-inv [<=]77.4% | \[ c0 \cdot \sqrt{\frac{\color{blue}{\frac{A}{V}}}{\ell}}
\] |
sqrt-undiv [<=]38.2% | \[ c0 \cdot \color{blue}{\frac{\sqrt{\frac{A}{V}}}{\sqrt{\ell}}}
\] |
associate-*r/ [=>]38.3% | \[ \color{blue}{\frac{c0 \cdot \sqrt{\frac{A}{V}}}{\sqrt{\ell}}}
\] |
associate-/l* [=>]38.3% | \[ \color{blue}{\frac{c0}{\frac{\sqrt{\ell}}{\sqrt{\frac{A}{V}}}}}
\] |
sqrt-undiv [=>]77.6% | \[ \frac{c0}{\color{blue}{\sqrt{\frac{\ell}{\frac{A}{V}}}}}
\] |
associate-/l* [<=]56.2% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{\ell \cdot V}{A}}}}
\] |
*-commutative [<=]56.2% | \[ \frac{c0}{\sqrt{\frac{\color{blue}{V \cdot \ell}}{A}}}
\] |
associate-*r/ [<=]77.4% | \[ \frac{c0}{\sqrt{\color{blue}{V \cdot \frac{\ell}{A}}}}
\] |
Applied egg-rr77.6%
[Start]77.4% | \[ \frac{c0}{\sqrt{V \cdot \frac{\ell}{A}}}
\] |
|---|---|
clear-num [=>]77.5% | \[ \frac{c0}{\sqrt{V \cdot \color{blue}{\frac{1}{\frac{A}{\ell}}}}}
\] |
div-inv [<=]77.5% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{V}{\frac{A}{\ell}}}}}
\] |
associate-/r/ [=>]77.5% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{V}{A} \cdot \ell}}}
\] |
clear-num [=>]77.4% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{1}{\frac{A}{V}}} \cdot \ell}}
\] |
associate-/r/ [<=]77.6% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{1}{\frac{\frac{A}{V}}{\ell}}}}}
\] |
if 3.99999999999999964e-307 < (*.f64 V l) < 1.99999999999999984e274Initial program 84.4%
Applied egg-rr99.4%
[Start]84.4% | \[ c0 \cdot \sqrt{\frac{A}{V \cdot \ell}}
\] |
|---|---|
div-inv [=>]84.4% | \[ c0 \cdot \sqrt{\color{blue}{A \cdot \frac{1}{V \cdot \ell}}}
\] |
sqrt-prod [=>]99.4% | \[ c0 \cdot \color{blue}{\left(\sqrt{A} \cdot \sqrt{\frac{1}{V \cdot \ell}}\right)}
\] |
pow1/2 [=>]99.4% | \[ c0 \cdot \left(\sqrt{A} \cdot \color{blue}{{\left(\frac{1}{V \cdot \ell}\right)}^{0.5}}\right)
\] |
inv-pow [=>]99.4% | \[ c0 \cdot \left(\sqrt{A} \cdot {\color{blue}{\left({\left(V \cdot \ell\right)}^{-1}\right)}}^{0.5}\right)
\] |
pow-pow [=>]99.4% | \[ c0 \cdot \left(\sqrt{A} \cdot \color{blue}{{\left(V \cdot \ell\right)}^{\left(-1 \cdot 0.5\right)}}\right)
\] |
metadata-eval [=>]99.4% | \[ c0 \cdot \left(\sqrt{A} \cdot {\left(V \cdot \ell\right)}^{\color{blue}{-0.5}}\right)
\] |
if 1.99999999999999984e274 < (*.f64 V l) Initial program 49.5%
Applied egg-rr82.7%
[Start]49.5% | \[ c0 \cdot \sqrt{\frac{A}{V \cdot \ell}}
\] |
|---|---|
*-un-lft-identity [=>]49.5% | \[ c0 \cdot \sqrt{\frac{\color{blue}{1 \cdot A}}{V \cdot \ell}}
\] |
times-frac [=>]82.7% | \[ c0 \cdot \sqrt{\color{blue}{\frac{1}{V} \cdot \frac{A}{\ell}}}
\] |
Applied egg-rr83.0%
[Start]82.7% | \[ c0 \cdot \sqrt{\frac{1}{V} \cdot \frac{A}{\ell}}
\] |
|---|---|
*-commutative [=>]82.7% | \[ c0 \cdot \sqrt{\color{blue}{\frac{A}{\ell} \cdot \frac{1}{V}}}
\] |
associate-*l/ [=>]82.8% | \[ c0 \cdot \sqrt{\color{blue}{\frac{A \cdot \frac{1}{V}}{\ell}}}
\] |
div-inv [<=]82.8% | \[ c0 \cdot \sqrt{\frac{\color{blue}{\frac{A}{V}}}{\ell}}
\] |
sqrt-undiv [<=]52.4% | \[ c0 \cdot \color{blue}{\frac{\sqrt{\frac{A}{V}}}{\sqrt{\ell}}}
\] |
associate-*r/ [=>]47.2% | \[ \color{blue}{\frac{c0 \cdot \sqrt{\frac{A}{V}}}{\sqrt{\ell}}}
\] |
associate-/l* [=>]52.7% | \[ \color{blue}{\frac{c0}{\frac{\sqrt{\ell}}{\sqrt{\frac{A}{V}}}}}
\] |
sqrt-undiv [=>]83.1% | \[ \frac{c0}{\color{blue}{\sqrt{\frac{\ell}{\frac{A}{V}}}}}
\] |
associate-/l* [<=]49.7% | \[ \frac{c0}{\sqrt{\color{blue}{\frac{\ell \cdot V}{A}}}}
\] |
*-commutative [<=]49.7% | \[ \frac{c0}{\sqrt{\frac{\color{blue}{V \cdot \ell}}{A}}}
\] |
associate-*r/ [<=]83.0% | \[ \frac{c0}{\sqrt{\color{blue}{V \cdot \frac{\ell}{A}}}}
\] |
Final simplification76.0%
| Alternative 1 | |
|---|---|
| Accuracy | 91.6% |
| Cost | 20036 |
| Alternative 2 | |
|---|---|
| Accuracy | 90.1% |
| Cost | 19972 |
| Alternative 3 | |
|---|---|
| Accuracy | 91.0% |
| Cost | 14352 |
| Alternative 4 | |
|---|---|
| Accuracy | 84.5% |
| Cost | 14092 |
| Alternative 5 | |
|---|---|
| Accuracy | 84.5% |
| Cost | 14028 |
| Alternative 6 | |
|---|---|
| Accuracy | 82.0% |
| Cost | 13636 |
| Alternative 7 | |
|---|---|
| Accuracy | 80.2% |
| Cost | 7688 |
| Alternative 8 | |
|---|---|
| Accuracy | 80.2% |
| Cost | 7688 |
| Alternative 9 | |
|---|---|
| Accuracy | 79.9% |
| Cost | 7625 |
| Alternative 10 | |
|---|---|
| Accuracy | 80.2% |
| Cost | 7625 |
| Alternative 11 | |
|---|---|
| Accuracy | 79.5% |
| Cost | 7624 |
| Alternative 12 | |
|---|---|
| Accuracy | 73.7% |
| Cost | 6848 |
herbie shell --seed 2023271
(FPCore (c0 A V l)
:name "Henrywood and Agarwal, Equation (3)"
:precision binary64
(* c0 (sqrt (/ A (* V l)))))