
(FPCore (w0 M D h l d) :precision binary64 (* 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) {
return w0 * sqrt((1.0 - (pow(((M * D) / (2.0 * d)), 2.0) * (h / l))));
}
real(8) function code(w0, m, d, h, l, d_1)
real(8), intent (in) :: w0
real(8), intent (in) :: m
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: d_1
code = w0 * sqrt((1.0d0 - ((((m * d) / (2.0d0 * d_1)) ** 2.0d0) * (h / l))))
end function
public static double code(double w0, double M, double D, double h, double l, double d) {
return w0 * Math.sqrt((1.0 - (Math.pow(((M * D) / (2.0 * d)), 2.0) * (h / l))));
}
def code(w0, M, D, h, l, d): return w0 * math.sqrt((1.0 - (math.pow(((M * D) / (2.0 * d)), 2.0) * (h / l))))
function code(w0, M, D, h, l, d) return Float64(w0 * sqrt(Float64(1.0 - Float64((Float64(Float64(M * D) / Float64(2.0 * d)) ^ 2.0) * Float64(h / l))))) end
function tmp = code(w0, M, D, h, l, d) tmp = w0 * sqrt((1.0 - ((((M * D) / (2.0 * d)) ^ 2.0) * (h / l)))); end
code[w0_, M_, D_, h_, l_, d_] := N[(w0 * N[Sqrt[N[(1.0 - N[(N[Power[N[(N[(M * D), $MachinePrecision] / N[(2.0 * d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 17 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (w0 M D h l d) :precision binary64 (* 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) {
return w0 * sqrt((1.0 - (pow(((M * D) / (2.0 * d)), 2.0) * (h / l))));
}
real(8) function code(w0, m, d, h, l, d_1)
real(8), intent (in) :: w0
real(8), intent (in) :: m
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: d_1
code = w0 * sqrt((1.0d0 - ((((m * d) / (2.0d0 * d_1)) ** 2.0d0) * (h / l))))
end function
public static double code(double w0, double M, double D, double h, double l, double d) {
return w0 * Math.sqrt((1.0 - (Math.pow(((M * D) / (2.0 * d)), 2.0) * (h / l))));
}
def code(w0, M, D, h, l, d): return w0 * math.sqrt((1.0 - (math.pow(((M * D) / (2.0 * d)), 2.0) * (h / l))))
function code(w0, M, D, h, l, d) return Float64(w0 * sqrt(Float64(1.0 - Float64((Float64(Float64(M * D) / Float64(2.0 * d)) ^ 2.0) * Float64(h / l))))) end
function tmp = code(w0, M, D, h, l, d) tmp = w0 * sqrt((1.0 - ((((M * D) / (2.0 * d)) ^ 2.0) * (h / l)))); end
code[w0_, M_, D_, h_, l_, d_] := N[(w0 * N[Sqrt[N[(1.0 - N[(N[Power[N[(N[(M * D), $MachinePrecision] / N[(2.0 * d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
w0 \cdot \sqrt{1 - {\left(\frac{M \cdot D}{2 \cdot d}\right)}^{2} \cdot \frac{h}{\ell}}
\end{array}
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* 2.0 d_m) 2e-51)
(*
w0
(sqrt
(fma
(/ 0.5 d_m)
(* M_m (/ (* D_m (* (/ (* -0.5 (* D_m M_m)) d_m) h)) l))
1.0)))
(*
(sqrt
(fma
(* (* (* (/ M_m l) h) -0.5) (/ D_m d_m))
(* (* (/ 0.5 d_m) D_m) M_m)
1.0))
w0)))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((2.0 * d_m) <= 2e-51) {
tmp = w0 * sqrt(fma((0.5 / d_m), (M_m * ((D_m * (((-0.5 * (D_m * M_m)) / d_m) * h)) / l)), 1.0));
} else {
tmp = sqrt(fma(((((M_m / l) * h) * -0.5) * (D_m / d_m)), (((0.5 / d_m) * D_m) * M_m), 1.0)) * w0;
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64(2.0 * d_m) <= 2e-51) tmp = Float64(w0 * sqrt(fma(Float64(0.5 / d_m), Float64(M_m * Float64(Float64(D_m * Float64(Float64(Float64(-0.5 * Float64(D_m * M_m)) / d_m) * h)) / l)), 1.0))); else tmp = Float64(sqrt(fma(Float64(Float64(Float64(Float64(M_m / l) * h) * -0.5) * Float64(D_m / d_m)), Float64(Float64(Float64(0.5 / d_m) * D_m) * M_m), 1.0)) * w0); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(2.0 * d$95$m), $MachinePrecision], 2e-51], N[(w0 * N[Sqrt[N[(N[(0.5 / d$95$m), $MachinePrecision] * N[(M$95$m * N[(N[(D$95$m * N[(N[(N[(-0.5 * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision] / d$95$m), $MachinePrecision] * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[Sqrt[N[(N[(N[(N[(N[(M$95$m / l), $MachinePrecision] * h), $MachinePrecision] * -0.5), $MachinePrecision] * N[(D$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * w0), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;2 \cdot d\_m \leq 2 \cdot 10^{-51}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\frac{0.5}{d\_m}, M\_m \cdot \frac{D\_m \cdot \left(\frac{-0.5 \cdot \left(D\_m \cdot M\_m\right)}{d\_m} \cdot h\right)}{\ell}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\left(\left(\frac{M\_m}{\ell} \cdot h\right) \cdot -0.5\right) \cdot \frac{D\_m}{d\_m}, \left(\frac{0.5}{d\_m} \cdot D\_m\right) \cdot M\_m, 1\right)} \cdot w0\\
\end{array}
\end{array}
if (*.f64 #s(literal 2 binary64) d) < 2e-51Initial program 78.6%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites84.5%
Applied rewrites87.2%
if 2e-51 < (*.f64 #s(literal 2 binary64) d) Initial program 90.5%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites95.4%
Taylor expanded in M around 0
times-fracN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-/.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6488.1
Applied rewrites88.1%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6488.1
Applied rewrites89.5%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(let* ((t_0 (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l))))
(if (or (<= t_0 -5e+237) (not (<= t_0 -2e-6)))
(*
w0
(fma D_m (* (* -0.125 D_m) (* (/ (* h (/ M_m d_m)) l) (/ M_m d_m))) 1.0))
(*
w0
(sqrt
(fma
(* (* -0.25 D_m) (/ (* h (* M_m D_m)) (* d_m d_m)))
(/ M_m l)
1.0))))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double t_0 = pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l);
double tmp;
if ((t_0 <= -5e+237) || !(t_0 <= -2e-6)) {
tmp = w0 * fma(D_m, ((-0.125 * D_m) * (((h * (M_m / d_m)) / l) * (M_m / d_m))), 1.0);
} else {
tmp = w0 * sqrt(fma(((-0.25 * D_m) * ((h * (M_m * D_m)) / (d_m * d_m))), (M_m / l), 1.0));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) t_0 = Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) tmp = 0.0 if ((t_0 <= -5e+237) || !(t_0 <= -2e-6)) tmp = Float64(w0 * fma(D_m, Float64(Float64(-0.125 * D_m) * Float64(Float64(Float64(h * Float64(M_m / d_m)) / l) * Float64(M_m / d_m))), 1.0)); else tmp = Float64(w0 * sqrt(fma(Float64(Float64(-0.25 * D_m) * Float64(Float64(h * Float64(M_m * D_m)) / Float64(d_m * d_m))), Float64(M_m / l), 1.0))); end return tmp end
d_m = N[Abs[d], $MachinePrecision]
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := Block[{t$95$0 = N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[t$95$0, -5e+237], N[Not[LessEqual[t$95$0, -2e-6]], $MachinePrecision]], N[(w0 * N[(D$95$m * N[(N[(-0.125 * D$95$m), $MachinePrecision] * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision] * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(w0 * N[Sqrt[N[(N[(N[(-0.25 * D$95$m), $MachinePrecision] * N[(N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision] / N[(d$95$m * d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
t_0 := {\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell}\\
\mathbf{if}\;t\_0 \leq -5 \cdot 10^{+237} \lor \neg \left(t\_0 \leq -2 \cdot 10^{-6}\right):\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(D\_m, \left(-0.125 \cdot D\_m\right) \cdot \left(\frac{h \cdot \frac{M\_m}{d\_m}}{\ell} \cdot \frac{M\_m}{d\_m}\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(-0.25 \cdot D\_m\right) \cdot \frac{h \cdot \left(M\_m \cdot D\_m\right)}{d\_m \cdot d\_m}, \frac{M\_m}{\ell}, 1\right)}\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -5.0000000000000002e237 or -1.99999999999999991e-6 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 81.0%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites59.4%
Applied rewrites62.5%
Applied rewrites85.1%
if -5.0000000000000002e237 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -1.99999999999999991e-6Initial program 99.2%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6432.0
Applied rewrites32.0%
Applied rewrites46.1%
Applied rewrites53.4%
Applied rewrites61.4%
Final simplification83.3%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(let* ((t_0 (- 1.0 (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)))))
(if (<= t_0 1.0)
(* w0 1.0)
(if (<= t_0 2e+156)
(*
w0
(sqrt
(fma
(* h -0.25)
(/ (* (* (* M_m M_m) D_m) D_m) (* (* d_m d_m) l))
1.0)))
(*
w0
(fma
D_m
(/ (* (* (* h (/ M_m d_m)) M_m) (* -0.125 D_m)) (* l d_m))
1.0))))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double t_0 = 1.0 - (pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l));
double tmp;
if (t_0 <= 1.0) {
tmp = w0 * 1.0;
} else if (t_0 <= 2e+156) {
tmp = w0 * sqrt(fma((h * -0.25), ((((M_m * M_m) * D_m) * D_m) / ((d_m * d_m) * l)), 1.0));
} else {
tmp = w0 * fma(D_m, ((((h * (M_m / d_m)) * M_m) * (-0.125 * D_m)) / (l * d_m)), 1.0);
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) t_0 = Float64(1.0 - Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l))) tmp = 0.0 if (t_0 <= 1.0) tmp = Float64(w0 * 1.0); elseif (t_0 <= 2e+156) tmp = Float64(w0 * sqrt(fma(Float64(h * -0.25), Float64(Float64(Float64(Float64(M_m * M_m) * D_m) * D_m) / Float64(Float64(d_m * d_m) * l)), 1.0))); else tmp = Float64(w0 * fma(D_m, Float64(Float64(Float64(Float64(h * Float64(M_m / d_m)) * M_m) * Float64(-0.125 * D_m)) / Float64(l * d_m)), 1.0)); end return tmp end
d_m = N[Abs[d], $MachinePrecision]
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := Block[{t$95$0 = N[(1.0 - N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 1.0], N[(w0 * 1.0), $MachinePrecision], If[LessEqual[t$95$0, 2e+156], N[(w0 * N[Sqrt[N[(N[(h * -0.25), $MachinePrecision] * N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] / N[(N[(d$95$m * d$95$m), $MachinePrecision] * l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * N[(D$95$m * N[(N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * M$95$m), $MachinePrecision] * N[(-0.125 * D$95$m), $MachinePrecision]), $MachinePrecision] / N[(l * d$95$m), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
t_0 := 1 - {\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell}\\
\mathbf{if}\;t\_0 \leq 1:\\
\;\;\;\;w0 \cdot 1\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+156}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(h \cdot -0.25, \frac{\left(\left(M\_m \cdot M\_m\right) \cdot D\_m\right) \cdot D\_m}{\left(d\_m \cdot d\_m\right) \cdot \ell}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(D\_m, \frac{\left(\left(h \cdot \frac{M\_m}{d\_m}\right) \cdot M\_m\right) \cdot \left(-0.125 \cdot D\_m\right)}{\ell \cdot d\_m}, 1\right)\\
\end{array}
\end{array}
if (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l))) < 1Initial program 99.4%
Taylor expanded in M around 0
Applied rewrites100.0%
if 1 < (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l))) < 2e156Initial program 99.1%
Taylor expanded in M around 0
+-commutativeN/A
associate-*r/N/A
associate-*r*N/A
associate-*r*N/A
associate-*l/N/A
associate-*r/N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
distribute-lft-inN/A
associate-*r*N/A
rgt-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites62.4%
if 2e156 < (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l))) Initial program 48.5%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites42.5%
Applied rewrites44.1%
Applied rewrites57.6%
Applied rewrites55.3%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<=
(sqrt (- 1.0 (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l))))
2e+129)
(*
w0
(sqrt
(fma
(* (* (/ 0.5 d_m) M_m) D_m)
(* (* (/ h l) (* D_m M_m)) (/ -0.5 d_m))
1.0)))
(*
w0
(sqrt
(-
1.0
(* (* 0.25 D_m) (* D_m (* (/ (* h (/ M_m d_m)) d_m) (/ M_m l)))))))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if (sqrt((1.0 - (pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)))) <= 2e+129) {
tmp = w0 * sqrt(fma((((0.5 / d_m) * M_m) * D_m), (((h / l) * (D_m * M_m)) * (-0.5 / d_m)), 1.0));
} else {
tmp = w0 * sqrt((1.0 - ((0.25 * D_m) * (D_m * (((h * (M_m / d_m)) / d_m) * (M_m / l))))));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (sqrt(Float64(1.0 - Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)))) <= 2e+129) tmp = Float64(w0 * sqrt(fma(Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), Float64(Float64(Float64(h / l) * Float64(D_m * M_m)) * Float64(-0.5 / d_m)), 1.0))); else tmp = Float64(w0 * sqrt(Float64(1.0 - Float64(Float64(0.25 * D_m) * Float64(D_m * Float64(Float64(Float64(h * Float64(M_m / d_m)) / d_m) * Float64(M_m / l))))))); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[Sqrt[N[(1.0 - N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 2e+129], N[(w0 * N[Sqrt[N[(N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(N[(N[(h / l), $MachinePrecision] * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision] * N[(-0.5 / d$95$m), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * N[Sqrt[N[(1.0 - N[(N[(0.25 * D$95$m), $MachinePrecision] * N[(D$95$m * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] / d$95$m), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\sqrt{1 - {\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell}} \leq 2 \cdot 10^{+129}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, \left(\frac{h}{\ell} \cdot \left(D\_m \cdot M\_m\right)\right) \cdot \frac{-0.5}{d\_m}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{1 - \left(0.25 \cdot D\_m\right) \cdot \left(D\_m \cdot \left(\frac{h \cdot \frac{M\_m}{d\_m}}{d\_m} \cdot \frac{M\_m}{\ell}\right)\right)}\\
\end{array}
\end{array}
if (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)))) < 2e129Initial program 99.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites94.6%
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-neg2N/A
distribute-frac-negN/A
Applied rewrites98.3%
if 2e129 < (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)))) Initial program 42.6%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6447.5
Applied rewrites47.5%
Applied rewrites53.4%
Applied rewrites64.4%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)) 5e-183)
(*
w0
(sqrt
(fma
(* (/ h l) (/ (* (* D_m M_m) -0.5) d_m))
(* (* (/ 0.5 d_m) M_m) D_m)
1.0)))
(*
w0
(sqrt
(fma
(* (* -0.25 D_m) (/ (* (* h (/ M_m d_m)) D_m) d_m))
(/ M_m l)
1.0)))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= 5e-183) {
tmp = w0 * sqrt(fma(((h / l) * (((D_m * M_m) * -0.5) / d_m)), (((0.5 / d_m) * M_m) * D_m), 1.0));
} else {
tmp = w0 * sqrt(fma(((-0.25 * D_m) * (((h * (M_m / d_m)) * D_m) / d_m)), (M_m / l), 1.0));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) <= 5e-183) tmp = Float64(w0 * sqrt(fma(Float64(Float64(h / l) * Float64(Float64(Float64(D_m * M_m) * -0.5) / d_m)), Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), 1.0))); else tmp = Float64(w0 * sqrt(fma(Float64(Float64(-0.25 * D_m) * Float64(Float64(Float64(h * Float64(M_m / d_m)) * D_m) / d_m)), Float64(M_m / l), 1.0))); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision], 5e-183], N[(w0 * N[Sqrt[N[(N[(N[(h / l), $MachinePrecision] * N[(N[(N[(D$95$m * M$95$m), $MachinePrecision] * -0.5), $MachinePrecision] / d$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * N[Sqrt[N[(N[(N[(-0.25 * D$95$m), $MachinePrecision] * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * D$95$m), $MachinePrecision] / d$95$m), $MachinePrecision]), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq 5 \cdot 10^{-183}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\frac{h}{\ell} \cdot \frac{\left(D\_m \cdot M\_m\right) \cdot -0.5}{d\_m}, \left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(-0.25 \cdot D\_m\right) \cdot \frac{\left(h \cdot \frac{M\_m}{d\_m}\right) \cdot D\_m}{d\_m}, \frac{M\_m}{\ell}, 1\right)}\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < 5.0000000000000002e-183Initial program 88.6%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
distribute-rgt-neg-inN/A
lift-pow.f64N/A
unpow2N/A
distribute-lft-neg-inN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites89.4%
if 5.0000000000000002e-183 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 34.5%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6455.4
Applied rewrites55.4%
Applied rewrites63.6%
Applied rewrites66.5%
Applied rewrites83.0%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (- 1.0 (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l))) 1.0)
(* w0 1.0)
(*
w0
(sqrt
(fma
(* (* (/ 0.5 d_m) M_m) D_m)
(/ (* (* h M_m) (* -0.5 D_m)) (* l d_m))
1.0)))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((1.0 - (pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l))) <= 1.0) {
tmp = w0 * 1.0;
} else {
tmp = w0 * sqrt(fma((((0.5 / d_m) * M_m) * D_m), (((h * M_m) * (-0.5 * D_m)) / (l * d_m)), 1.0));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64(1.0 - Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l))) <= 1.0) tmp = Float64(w0 * 1.0); else tmp = Float64(w0 * sqrt(fma(Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), Float64(Float64(Float64(h * M_m) * Float64(-0.5 * D_m)) / Float64(l * d_m)), 1.0))); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(1.0 - N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 1.0], N[(w0 * 1.0), $MachinePrecision], N[(w0 * N[Sqrt[N[(N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(N[(N[(h * M$95$m), $MachinePrecision] * N[(-0.5 * D$95$m), $MachinePrecision]), $MachinePrecision] / N[(l * d$95$m), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;1 - {\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq 1:\\
\;\;\;\;w0 \cdot 1\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, \frac{\left(h \cdot M\_m\right) \cdot \left(-0.5 \cdot D\_m\right)}{\ell \cdot d\_m}, 1\right)}\\
\end{array}
\end{array}
if (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l))) < 1Initial program 99.4%
Taylor expanded in M around 0
Applied rewrites100.0%
if 1 < (-.f64 #s(literal 1 binary64) (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l))) Initial program 56.1%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites73.3%
Taylor expanded in M around 0
times-fracN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-/.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6467.0
Applied rewrites67.0%
Applied rewrites69.8%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)) -2e-6)
(*
w0
(sqrt
(fma
(* (* (/ 0.5 d_m) M_m) D_m)
(* h (/ (* -0.5 (* D_m M_m)) (* l d_m)))
1.0)))
(*
w0
(fma D_m (* (* -0.125 D_m) (* (/ (* h (/ M_m d_m)) l) (/ M_m d_m))) 1.0))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -2e-6) {
tmp = w0 * sqrt(fma((((0.5 / d_m) * M_m) * D_m), (h * ((-0.5 * (D_m * M_m)) / (l * d_m))), 1.0));
} else {
tmp = w0 * fma(D_m, ((-0.125 * D_m) * (((h * (M_m / d_m)) / l) * (M_m / d_m))), 1.0);
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) <= -2e-6) tmp = Float64(w0 * sqrt(fma(Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), Float64(h * Float64(Float64(-0.5 * Float64(D_m * M_m)) / Float64(l * d_m))), 1.0))); else tmp = Float64(w0 * fma(D_m, Float64(Float64(-0.125 * D_m) * Float64(Float64(Float64(h * Float64(M_m / d_m)) / l) * Float64(M_m / d_m))), 1.0)); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision], -2e-6], N[(w0 * N[Sqrt[N[(N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(h * N[(N[(-0.5 * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision] / N[(l * d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * N[(D$95$m * N[(N[(-0.125 * D$95$m), $MachinePrecision] * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision] * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq -2 \cdot 10^{-6}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, h \cdot \frac{-0.5 \cdot \left(D\_m \cdot M\_m\right)}{\ell \cdot d\_m}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(D\_m, \left(-0.125 \cdot D\_m\right) \cdot \left(\frac{h \cdot \frac{M\_m}{d\_m}}{\ell} \cdot \frac{M\_m}{d\_m}\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -1.99999999999999991e-6Initial program 68.0%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites68.2%
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-neg2N/A
distribute-frac-negN/A
Applied rewrites69.2%
if -1.99999999999999991e-6 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 89.1%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites64.1%
Applied rewrites67.6%
Applied rewrites95.1%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)) -1e-8)
(*
w0
(sqrt
(fma (* h -0.25) (/ (* (* (* D_m D_m) M_m) M_m) (* (* d_m d_m) l)) 1.0)))
(* w0 1.0)))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -1e-8) {
tmp = w0 * sqrt(fma((h * -0.25), ((((D_m * D_m) * M_m) * M_m) / ((d_m * d_m) * l)), 1.0));
} else {
tmp = w0 * 1.0;
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) <= -1e-8) tmp = Float64(w0 * sqrt(fma(Float64(h * -0.25), Float64(Float64(Float64(Float64(D_m * D_m) * M_m) * M_m) / Float64(Float64(d_m * d_m) * l)), 1.0))); else tmp = Float64(w0 * 1.0); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision], -1e-8], N[(w0 * N[Sqrt[N[(N[(h * -0.25), $MachinePrecision] * N[(N[(N[(N[(D$95$m * D$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] / N[(N[(d$95$m * d$95$m), $MachinePrecision] * l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * 1.0), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq -1 \cdot 10^{-8}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(h \cdot -0.25, \frac{\left(\left(D\_m \cdot D\_m\right) \cdot M\_m\right) \cdot M\_m}{\left(d\_m \cdot d\_m\right) \cdot \ell}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot 1\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -1e-8Initial program 68.4%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6442.0
Applied rewrites42.0%
Applied rewrites49.6%
Taylor expanded in h around inf
Applied rewrites48.3%
if -1e-8 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 89.1%
Taylor expanded in M around 0
Applied rewrites96.2%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)) -1e-8)
(*
w0
(fma (* h -0.125) (* D_m (* M_m (/ (* M_m D_m) (* (* d_m d_m) l)))) 1.0))
(* w0 1.0)))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -1e-8) {
tmp = w0 * fma((h * -0.125), (D_m * (M_m * ((M_m * D_m) / ((d_m * d_m) * l)))), 1.0);
} else {
tmp = w0 * 1.0;
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) <= -1e-8) tmp = Float64(w0 * fma(Float64(h * -0.125), Float64(D_m * Float64(M_m * Float64(Float64(M_m * D_m) / Float64(Float64(d_m * d_m) * l)))), 1.0)); else tmp = Float64(w0 * 1.0); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision], -1e-8], N[(w0 * N[(N[(h * -0.125), $MachinePrecision] * N[(D$95$m * N[(M$95$m * N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(N[(d$95$m * d$95$m), $MachinePrecision] * l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(w0 * 1.0), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq -1 \cdot 10^{-8}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(h \cdot -0.125, D\_m \cdot \left(M\_m \cdot \frac{M\_m \cdot D\_m}{\left(d\_m \cdot d\_m\right) \cdot \ell}\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot 1\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -1e-8Initial program 68.4%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites37.9%
Taylor expanded in h around inf
Applied rewrites39.7%
Applied rewrites39.8%
Applied rewrites44.0%
if -1e-8 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 89.1%
Taylor expanded in M around 0
Applied rewrites96.2%
d_m = (fabs.f64 d) D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. (FPCore (w0 M_m D_m h l d_m) :precision binary64 (if (<= (* (pow (/ (* M_m D_m) (* 2.0 d_m)) 2.0) (/ h l)) -2e+234) (* w0 (/ (* (* -0.125 (* (* (* M_m D_m) M_m) D_m)) h) (* (* d_m d_m) l))) (* w0 1.0)))
d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -2e+234) {
tmp = w0 * (((-0.125 * (((M_m * D_m) * M_m) * D_m)) * h) / ((d_m * d_m) * l));
} else {
tmp = w0 * 1.0;
}
return tmp;
}
d_m = abs(d)
D_m = abs(d)
M_m = abs(m)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
real(8) function code(w0, m_m, d_m, h, l, d_m_1)
real(8), intent (in) :: w0
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: d_m_1
real(8) :: tmp
if (((((m_m * d_m) / (2.0d0 * d_m_1)) ** 2.0d0) * (h / l)) <= (-2d+234)) then
tmp = w0 * ((((-0.125d0) * (((m_m * d_m) * m_m) * d_m)) * h) / ((d_m_1 * d_m_1) * l))
else
tmp = w0 * 1.0d0
end if
code = tmp
end function
d_m = Math.abs(d);
D_m = Math.abs(D);
M_m = Math.abs(M);
assert w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m;
public static double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((Math.pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -2e+234) {
tmp = w0 * (((-0.125 * (((M_m * D_m) * M_m) * D_m)) * h) / ((d_m * d_m) * l));
} else {
tmp = w0 * 1.0;
}
return tmp;
}
d_m = math.fabs(d) D_m = math.fabs(D) M_m = math.fabs(M) [w0, M_m, D_m, h, l, d_m] = sort([w0, M_m, D_m, h, l, d_m]) def code(w0, M_m, D_m, h, l, d_m): tmp = 0 if (math.pow(((M_m * D_m) / (2.0 * d_m)), 2.0) * (h / l)) <= -2e+234: tmp = w0 * (((-0.125 * (((M_m * D_m) * M_m) * D_m)) * h) / ((d_m * d_m) * l)) else: tmp = w0 * 1.0 return tmp
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64((Float64(Float64(M_m * D_m) / Float64(2.0 * d_m)) ^ 2.0) * Float64(h / l)) <= -2e+234) tmp = Float64(w0 * Float64(Float64(Float64(-0.125 * Float64(Float64(Float64(M_m * D_m) * M_m) * D_m)) * h) / Float64(Float64(d_m * d_m) * l))); else tmp = Float64(w0 * 1.0); end return tmp end
d_m = abs(d);
D_m = abs(D);
M_m = abs(M);
w0, M_m, D_m, h, l, d_m = num2cell(sort([w0, M_m, D_m, h, l, d_m])){:}
function tmp_2 = code(w0, M_m, D_m, h, l, d_m)
tmp = 0.0;
if (((((M_m * D_m) / (2.0 * d_m)) ^ 2.0) * (h / l)) <= -2e+234)
tmp = w0 * (((-0.125 * (((M_m * D_m) * M_m) * D_m)) * h) / ((d_m * d_m) * l));
else
tmp = w0 * 1.0;
end
tmp_2 = tmp;
end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d$95$m), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision], -2e+234], N[(w0 * N[(N[(N[(-0.125 * N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision]), $MachinePrecision] * h), $MachinePrecision] / N[(N[(d$95$m * d$95$m), $MachinePrecision] * l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(w0 * 1.0), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{M\_m \cdot D\_m}{2 \cdot d\_m}\right)}^{2} \cdot \frac{h}{\ell} \leq -2 \cdot 10^{+234}:\\
\;\;\;\;w0 \cdot \frac{\left(-0.125 \cdot \left(\left(\left(M\_m \cdot D\_m\right) \cdot M\_m\right) \cdot D\_m\right)\right) \cdot h}{\left(d\_m \cdot d\_m\right) \cdot \ell}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot 1\\
\end{array}
\end{array}
if (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) < -2.00000000000000004e234Initial program 59.1%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites46.1%
Taylor expanded in h around inf
Applied rewrites46.4%
Applied rewrites46.5%
Taylor expanded in M around inf
Applied rewrites51.1%
if -2.00000000000000004e234 < (*.f64 (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64)) (/.f64 h l)) Initial program 90.1%
Taylor expanded in M around 0
Applied rewrites88.3%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (/ h l) -4e-166)
(*
w0
(sqrt
(fma
(* (* (/ 0.5 d_m) M_m) D_m)
(* (* -0.5 (/ D_m d_m)) (/ (* h M_m) l))
1.0)))
(*
w0
(sqrt
(fma
(* (* -0.25 D_m) (/ (* (* h (/ M_m d_m)) D_m) d_m))
(/ M_m l)
1.0)))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((h / l) <= -4e-166) {
tmp = w0 * sqrt(fma((((0.5 / d_m) * M_m) * D_m), ((-0.5 * (D_m / d_m)) * ((h * M_m) / l)), 1.0));
} else {
tmp = w0 * sqrt(fma(((-0.25 * D_m) * (((h * (M_m / d_m)) * D_m) / d_m)), (M_m / l), 1.0));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64(h / l) <= -4e-166) tmp = Float64(w0 * sqrt(fma(Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), Float64(Float64(-0.5 * Float64(D_m / d_m)) * Float64(Float64(h * M_m) / l)), 1.0))); else tmp = Float64(w0 * sqrt(fma(Float64(Float64(-0.25 * D_m) * Float64(Float64(Float64(h * Float64(M_m / d_m)) * D_m) / d_m)), Float64(M_m / l), 1.0))); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(h / l), $MachinePrecision], -4e-166], N[(w0 * N[Sqrt[N[(N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(N[(-0.5 * N[(D$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(h * M$95$m), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(w0 * N[Sqrt[N[(N[(N[(-0.25 * D$95$m), $MachinePrecision] * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * D$95$m), $MachinePrecision] / d$95$m), $MachinePrecision]), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\frac{h}{\ell} \leq -4 \cdot 10^{-166}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, \left(-0.5 \cdot \frac{D\_m}{d\_m}\right) \cdot \frac{h \cdot M\_m}{\ell}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{\mathsf{fma}\left(\left(-0.25 \cdot D\_m\right) \cdot \frac{\left(h \cdot \frac{M\_m}{d\_m}\right) \cdot D\_m}{d\_m}, \frac{M\_m}{\ell}, 1\right)}\\
\end{array}
\end{array}
if (/.f64 h l) < -4.00000000000000016e-166Initial program 78.1%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites79.3%
Taylor expanded in M around 0
times-fracN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-/.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6477.6
Applied rewrites77.6%
if -4.00000000000000016e-166 < (/.f64 h l) Initial program 86.3%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6466.9
Applied rewrites66.9%
Applied rewrites78.1%
Applied rewrites82.7%
Applied rewrites90.6%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= (* 2.0 d_m) 1e-150)
(*
w0
(fma D_m (/ (* (* (* (* -0.125 D_m) h) (/ (/ M_m d_m) l)) M_m) d_m) 1.0))
(*
w0
(sqrt
(-
1.0
(* (* 0.25 D_m) (* D_m (* (* h (/ M_m (* d_m d_m))) (/ M_m l)))))))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if ((2.0 * d_m) <= 1e-150) {
tmp = w0 * fma(D_m, (((((-0.125 * D_m) * h) * ((M_m / d_m) / l)) * M_m) / d_m), 1.0);
} else {
tmp = w0 * sqrt((1.0 - ((0.25 * D_m) * (D_m * ((h * (M_m / (d_m * d_m))) * (M_m / l))))));
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (Float64(2.0 * d_m) <= 1e-150) tmp = Float64(w0 * fma(D_m, Float64(Float64(Float64(Float64(Float64(-0.125 * D_m) * h) * Float64(Float64(M_m / d_m) / l)) * M_m) / d_m), 1.0)); else tmp = Float64(w0 * sqrt(Float64(1.0 - Float64(Float64(0.25 * D_m) * Float64(D_m * Float64(Float64(h * Float64(M_m / Float64(d_m * d_m))) * Float64(M_m / l))))))); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[N[(2.0 * d$95$m), $MachinePrecision], 1e-150], N[(w0 * N[(D$95$m * N[(N[(N[(N[(N[(-0.125 * D$95$m), $MachinePrecision] * h), $MachinePrecision] * N[(N[(M$95$m / d$95$m), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] * M$95$m), $MachinePrecision] / d$95$m), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(w0 * N[Sqrt[N[(1.0 - N[(N[(0.25 * D$95$m), $MachinePrecision] * N[(D$95$m * N[(N[(h * N[(M$95$m / N[(d$95$m * d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;2 \cdot d\_m \leq 10^{-150}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(D\_m, \frac{\left(\left(\left(-0.125 \cdot D\_m\right) \cdot h\right) \cdot \frac{\frac{M\_m}{d\_m}}{\ell}\right) \cdot M\_m}{d\_m}, 1\right)\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \sqrt{1 - \left(0.25 \cdot D\_m\right) \cdot \left(D\_m \cdot \left(\left(h \cdot \frac{M\_m}{d\_m \cdot d\_m}\right) \cdot \frac{M\_m}{\ell}\right)\right)}\\
\end{array}
\end{array}
if (*.f64 #s(literal 2 binary64) d) < 1.00000000000000001e-150Initial program 78.1%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites49.8%
Applied rewrites56.0%
Applied rewrites73.4%
Applied rewrites70.1%
if 1.00000000000000001e-150 < (*.f64 #s(literal 2 binary64) d) Initial program 88.7%
Taylor expanded in d around 0
div-subN/A
*-inversesN/A
lower--.f64N/A
lower-/.f64N/A
associate-/l*N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6469.4
Applied rewrites69.4%
Applied rewrites83.4%
Applied rewrites89.0%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(*
w0
(sqrt
(fma
(* (* (/ 0.5 d_m) M_m) D_m)
(/ (* (* D_m 0.5) (* (/ M_m d_m) h)) (- l))
1.0))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
return w0 * sqrt(fma((((0.5 / d_m) * M_m) * D_m), (((D_m * 0.5) * ((M_m / d_m) * h)) / -l), 1.0));
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) return Float64(w0 * sqrt(fma(Float64(Float64(Float64(0.5 / d_m) * M_m) * D_m), Float64(Float64(Float64(D_m * 0.5) * Float64(Float64(M_m / d_m) * h)) / Float64(-l)), 1.0))) end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := N[(w0 * N[Sqrt[N[(N[(N[(N[(0.5 / d$95$m), $MachinePrecision] * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(N[(N[(D$95$m * 0.5), $MachinePrecision] * N[(N[(M$95$m / d$95$m), $MachinePrecision] * h), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
w0 \cdot \sqrt{\mathsf{fma}\left(\left(\frac{0.5}{d\_m} \cdot M\_m\right) \cdot D\_m, \frac{\left(D\_m \cdot 0.5\right) \cdot \left(\frac{M\_m}{d\_m} \cdot h\right)}{-\ell}, 1\right)}
\end{array}
Initial program 82.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
distribute-neg-frac2N/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
associate-/l*N/A
lower-fma.f64N/A
Applied rewrites88.0%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= D_m 1.8e-51)
(* w0 1.0)
(*
w0
(fma D_m (/ (* (* (* h (/ M_m d_m)) M_m) (* -0.125 D_m)) (* l d_m)) 1.0))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if (D_m <= 1.8e-51) {
tmp = w0 * 1.0;
} else {
tmp = w0 * fma(D_m, ((((h * (M_m / d_m)) * M_m) * (-0.125 * D_m)) / (l * d_m)), 1.0);
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (D_m <= 1.8e-51) tmp = Float64(w0 * 1.0); else tmp = Float64(w0 * fma(D_m, Float64(Float64(Float64(Float64(h * Float64(M_m / d_m)) * M_m) * Float64(-0.125 * D_m)) / Float64(l * d_m)), 1.0)); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[D$95$m, 1.8e-51], N[(w0 * 1.0), $MachinePrecision], N[(w0 * N[(D$95$m * N[(N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] * M$95$m), $MachinePrecision] * N[(-0.125 * D$95$m), $MachinePrecision]), $MachinePrecision] / N[(l * d$95$m), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;D\_m \leq 1.8 \cdot 10^{-51}:\\
\;\;\;\;w0 \cdot 1\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(D\_m, \frac{\left(\left(h \cdot \frac{M\_m}{d\_m}\right) \cdot M\_m\right) \cdot \left(-0.125 \cdot D\_m\right)}{\ell \cdot d\_m}, 1\right)\\
\end{array}
\end{array}
if D < 1.8e-51Initial program 81.3%
Taylor expanded in M around 0
Applied rewrites70.7%
if 1.8e-51 < D Initial program 86.5%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites59.2%
Applied rewrites59.3%
Applied rewrites77.8%
Applied rewrites76.2%
d_m = (fabs.f64 d)
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
(FPCore (w0 M_m D_m h l d_m)
:precision binary64
(if (<= M_m 5.4e-157)
(* w0 1.0)
(*
w0
(fma (* h -0.125) (* D_m (* (/ D_m d_m) (/ (* M_m M_m) (* l d_m)))) 1.0))))d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
double tmp;
if (M_m <= 5.4e-157) {
tmp = w0 * 1.0;
} else {
tmp = w0 * fma((h * -0.125), (D_m * ((D_m / d_m) * ((M_m * M_m) / (l * d_m)))), 1.0);
}
return tmp;
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) tmp = 0.0 if (M_m <= 5.4e-157) tmp = Float64(w0 * 1.0); else tmp = Float64(w0 * fma(Float64(h * -0.125), Float64(D_m * Float64(Float64(D_m / d_m) * Float64(Float64(M_m * M_m) / Float64(l * d_m)))), 1.0)); end return tmp end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := If[LessEqual[M$95$m, 5.4e-157], N[(w0 * 1.0), $MachinePrecision], N[(w0 * N[(N[(h * -0.125), $MachinePrecision] * N[(D$95$m * N[(N[(D$95$m / d$95$m), $MachinePrecision] * N[(N[(M$95$m * M$95$m), $MachinePrecision] / N[(l * d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
\begin{array}{l}
\mathbf{if}\;M\_m \leq 5.4 \cdot 10^{-157}:\\
\;\;\;\;w0 \cdot 1\\
\mathbf{else}:\\
\;\;\;\;w0 \cdot \mathsf{fma}\left(h \cdot -0.125, D\_m \cdot \left(\frac{D\_m}{d\_m} \cdot \frac{M\_m \cdot M\_m}{\ell \cdot d\_m}\right), 1\right)\\
\end{array}
\end{array}
if M < 5.4e-157Initial program 83.1%
Taylor expanded in M around 0
Applied rewrites72.9%
if 5.4e-157 < M Initial program 81.3%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites52.8%
Taylor expanded in h around inf
Applied rewrites57.6%
Applied rewrites59.8%
Applied rewrites65.1%
d_m = (fabs.f64 d) D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. (FPCore (w0 M_m D_m h l d_m) :precision binary64 (* w0 (fma D_m (* (* -0.125 D_m) (* (/ (* h (/ M_m d_m)) l) (/ M_m d_m))) 1.0)))
d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
return w0 * fma(D_m, ((-0.125 * D_m) * (((h * (M_m / d_m)) / l) * (M_m / d_m))), 1.0);
}
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) return Float64(w0 * fma(D_m, Float64(Float64(-0.125 * D_m) * Float64(Float64(Float64(h * Float64(M_m / d_m)) / l) * Float64(M_m / d_m))), 1.0)) end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := N[(w0 * N[(D$95$m * N[(N[(-0.125 * D$95$m), $MachinePrecision] * N[(N[(N[(h * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision] * N[(M$95$m / d$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
w0 \cdot \mathsf{fma}\left(D\_m, \left(-0.125 \cdot D\_m\right) \cdot \left(\frac{h \cdot \frac{M\_m}{d\_m}}{\ell} \cdot \frac{M\_m}{d\_m}\right), 1\right)
\end{array}
Initial program 82.4%
Taylor expanded in M around 0
+-commutativeN/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
Applied rewrites55.5%
Applied rewrites58.6%
Applied rewrites79.8%
d_m = (fabs.f64 d) D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. (FPCore (w0 M_m D_m h l d_m) :precision binary64 (* w0 1.0))
d_m = fabs(d);
D_m = fabs(D);
M_m = fabs(M);
assert(w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m);
double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
return w0 * 1.0;
}
d_m = abs(d)
D_m = abs(d)
M_m = abs(m)
NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function.
real(8) function code(w0, m_m, d_m, h, l, d_m_1)
real(8), intent (in) :: w0
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: d_m_1
code = w0 * 1.0d0
end function
d_m = Math.abs(d);
D_m = Math.abs(D);
M_m = Math.abs(M);
assert w0 < M_m && M_m < D_m && D_m < h && h < l && l < d_m;
public static double code(double w0, double M_m, double D_m, double h, double l, double d_m) {
return w0 * 1.0;
}
d_m = math.fabs(d) D_m = math.fabs(D) M_m = math.fabs(M) [w0, M_m, D_m, h, l, d_m] = sort([w0, M_m, D_m, h, l, d_m]) def code(w0, M_m, D_m, h, l, d_m): return w0 * 1.0
d_m = abs(d) D_m = abs(D) M_m = abs(M) w0, M_m, D_m, h, l, d_m = sort([w0, M_m, D_m, h, l, d_m]) function code(w0, M_m, D_m, h, l, d_m) return Float64(w0 * 1.0) end
d_m = abs(d);
D_m = abs(D);
M_m = abs(M);
w0, M_m, D_m, h, l, d_m = num2cell(sort([w0, M_m, D_m, h, l, d_m])){:}
function tmp = code(w0, M_m, D_m, h, l, d_m)
tmp = w0 * 1.0;
end
d_m = N[Abs[d], $MachinePrecision] D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: w0, M_m, D_m, h, l, and d_m should be sorted in increasing order before calling this function. code[w0_, M$95$m_, D$95$m_, h_, l_, d$95$m_] := N[(w0 * 1.0), $MachinePrecision]
\begin{array}{l}
d_m = \left|d\right|
\\
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[w0, M_m, D_m, h, l, d_m] = \mathsf{sort}([w0, M_m, D_m, h, l, d_m])\\
\\
w0 \cdot 1
\end{array}
Initial program 82.4%
Taylor expanded in M around 0
Applied rewrites68.0%
herbie shell --seed 2024319
(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))))))