
(FPCore (d h l M D) :precision binary64 (* (* (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)))))
double code(double d, double h, double l, double M, double D) {
return (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)));
}
real(8) function code(d, h, l, m, d_1)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m
real(8), intent (in) :: d_1
code = (((d / h) ** (1.0d0 / 2.0d0)) * ((d / l) ** (1.0d0 / 2.0d0))) * (1.0d0 - (((1.0d0 / 2.0d0) * (((m * d_1) / (2.0d0 * d)) ** 2.0d0)) * (h / l)))
end function
public static double code(double d, double h, double l, double M, double D) {
return (Math.pow((d / h), (1.0 / 2.0)) * Math.pow((d / l), (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * Math.pow(((M * D) / (2.0 * d)), 2.0)) * (h / l)));
}
def code(d, h, l, M, D): return (math.pow((d / h), (1.0 / 2.0)) * math.pow((d / l), (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * math.pow(((M * D) / (2.0 * d)), 2.0)) * (h / l)))
function code(d, h, l, M, D) return Float64(Float64((Float64(d / h) ^ Float64(1.0 / 2.0)) * (Float64(d / l) ^ Float64(1.0 / 2.0))) * Float64(1.0 - Float64(Float64(Float64(1.0 / 2.0) * (Float64(Float64(M * D) / Float64(2.0 * d)) ^ 2.0)) * Float64(h / l)))) end
function tmp = code(d, h, l, M, D) tmp = (((d / h) ^ (1.0 / 2.0)) * ((d / l) ^ (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * (((M * D) / (2.0 * d)) ^ 2.0)) * (h / l))); end
code[d_, h_, l_, M_, D_] := N[(N[(N[Power[N[(d / h), $MachinePrecision], N[(1.0 / 2.0), $MachinePrecision]], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], N[(1.0 / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(N[(1.0 / 2.0), $MachinePrecision] * N[Power[N[(N[(M * D), $MachinePrecision] / N[(2.0 * d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\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)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 18 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (d h l M D) :precision binary64 (* (* (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)))))
double code(double d, double h, double l, double M, double D) {
return (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)));
}
real(8) function code(d, h, l, m, d_1)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m
real(8), intent (in) :: d_1
code = (((d / h) ** (1.0d0 / 2.0d0)) * ((d / l) ** (1.0d0 / 2.0d0))) * (1.0d0 - (((1.0d0 / 2.0d0) * (((m * d_1) / (2.0d0 * d)) ** 2.0d0)) * (h / l)))
end function
public static double code(double d, double h, double l, double M, double D) {
return (Math.pow((d / h), (1.0 / 2.0)) * Math.pow((d / l), (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * Math.pow(((M * D) / (2.0 * d)), 2.0)) * (h / l)));
}
def code(d, h, l, M, D): return (math.pow((d / h), (1.0 / 2.0)) * math.pow((d / l), (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * math.pow(((M * D) / (2.0 * d)), 2.0)) * (h / l)))
function code(d, h, l, M, D) return Float64(Float64((Float64(d / h) ^ Float64(1.0 / 2.0)) * (Float64(d / l) ^ Float64(1.0 / 2.0))) * Float64(1.0 - Float64(Float64(Float64(1.0 / 2.0) * (Float64(Float64(M * D) / Float64(2.0 * d)) ^ 2.0)) * Float64(h / l)))) end
function tmp = code(d, h, l, M, D) tmp = (((d / h) ^ (1.0 / 2.0)) * ((d / l) ^ (1.0 / 2.0))) * (1.0 - (((1.0 / 2.0) * (((M * D) / (2.0 * d)) ^ 2.0)) * (h / l))); end
code[d_, h_, l_, M_, D_] := N[(N[(N[Power[N[(d / h), $MachinePrecision], N[(1.0 / 2.0), $MachinePrecision]], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], N[(1.0 / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(N[(1.0 / 2.0), $MachinePrecision] * N[Power[N[(N[(M * D), $MachinePrecision] / N[(2.0 * d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\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)
\end{array}
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0 (* (/ M_m d) D_m)) (t_1 (sqrt (- d))))
(if (<= d -1.05e-217)
(*
(*
(fma -0.5 (* (/ t_0 l) (/ (* (* 0.25 (/ M_m d)) D_m) (pow h -1.0))) 1.0)
(sqrt (/ d h)))
(/ t_1 (sqrt (- l))))
(if (<= d -1.4e-299)
(*
(*
(fma -0.5 (* (/ h l) (* 0.25 (pow (* D_m (/ M_m d)) 2.0))) 1.0)
(/ t_1 (sqrt (- h))))
(sqrt (/ d l)))
(if (<= d 1.1e-263)
(/
(* (fma (* (* (/ h l) -0.5) 0.25) (pow t_0 2.0) 1.0) (/ d (sqrt h)))
(sqrt l))
(*
(/ (/ d (sqrt l)) (sqrt h))
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = (M_m / d) * D_m;
double t_1 = sqrt(-d);
double tmp;
if (d <= -1.05e-217) {
tmp = (fma(-0.5, ((t_0 / l) * (((0.25 * (M_m / d)) * D_m) / pow(h, -1.0))), 1.0) * sqrt((d / h))) * (t_1 / sqrt(-l));
} else if (d <= -1.4e-299) {
tmp = (fma(-0.5, ((h / l) * (0.25 * pow((D_m * (M_m / d)), 2.0))), 1.0) * (t_1 / sqrt(-h))) * sqrt((d / l));
} else if (d <= 1.1e-263) {
tmp = (fma((((h / l) * -0.5) * 0.25), pow(t_0, 2.0), 1.0) * (d / sqrt(h))) / sqrt(l);
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = Float64(Float64(M_m / d) * D_m) t_1 = sqrt(Float64(-d)) tmp = 0.0 if (d <= -1.05e-217) tmp = Float64(Float64(fma(-0.5, Float64(Float64(t_0 / l) * Float64(Float64(Float64(0.25 * Float64(M_m / d)) * D_m) / (h ^ -1.0))), 1.0) * sqrt(Float64(d / h))) * Float64(t_1 / sqrt(Float64(-l)))); elseif (d <= -1.4e-299) tmp = Float64(Float64(fma(-0.5, Float64(Float64(h / l) * Float64(0.25 * (Float64(D_m * Float64(M_m / d)) ^ 2.0))), 1.0) * Float64(t_1 / sqrt(Float64(-h)))) * sqrt(Float64(d / l))); elseif (d <= 1.1e-263) tmp = Float64(Float64(fma(Float64(Float64(Float64(h / l) * -0.5) * 0.25), (t_0 ^ 2.0), 1.0) * Float64(d / sqrt(h))) / sqrt(l)); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0)); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(M$95$m / d), $MachinePrecision] * D$95$m), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[(-d)], $MachinePrecision]}, If[LessEqual[d, -1.05e-217], N[(N[(N[(-0.5 * N[(N[(t$95$0 / l), $MachinePrecision] * N[(N[(N[(0.25 * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision] * D$95$m), $MachinePrecision] / N[Power[h, -1.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(t$95$1 / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, -1.4e-299], N[(N[(N[(-0.5 * N[(N[(h / l), $MachinePrecision] * N[(0.25 * N[Power[N[(D$95$m * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] * N[(t$95$1 / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.1e-263], N[(N[(N[(N[(N[(N[(h / l), $MachinePrecision] * -0.5), $MachinePrecision] * 0.25), $MachinePrecision] * N[Power[t$95$0, 2.0], $MachinePrecision] + 1.0), $MachinePrecision] * N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{M\_m}{d} \cdot D\_m\\
t_1 := \sqrt{-d}\\
\mathbf{if}\;d \leq -1.05 \cdot 10^{-217}:\\
\;\;\;\;\left(\mathsf{fma}\left(-0.5, \frac{t\_0}{\ell} \cdot \frac{\left(0.25 \cdot \frac{M\_m}{d}\right) \cdot D\_m}{{h}^{-1}}, 1\right) \cdot \sqrt{\frac{d}{h}}\right) \cdot \frac{t\_1}{\sqrt{-\ell}}\\
\mathbf{elif}\;d \leq -1.4 \cdot 10^{-299}:\\
\;\;\;\;\left(\mathsf{fma}\left(-0.5, \frac{h}{\ell} \cdot \left(0.25 \cdot {\left(D\_m \cdot \frac{M\_m}{d}\right)}^{2}\right), 1\right) \cdot \frac{t\_1}{\sqrt{-h}}\right) \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;d \leq 1.1 \cdot 10^{-263}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\frac{h}{\ell} \cdot -0.5\right) \cdot 0.25, {t\_0}^{2}, 1\right) \cdot \frac{d}{\sqrt{h}}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\end{array}
\end{array}
if d < -1.05e-217Initial program 74.4%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f640.0
Applied rewrites0.0%
Applied rewrites74.6%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6476.5
Applied rewrites76.5%
lift-*.f64N/A
*-commutativeN/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites86.3%
if -1.05e-217 < d < -1.4000000000000001e-299Initial program 31.3%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f640.0
Applied rewrites0.0%
Applied rewrites21.8%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6455.4
Applied rewrites55.4%
if -1.4000000000000001e-299 < d < 1.1e-263Initial program 12.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6433.9
Applied rewrites33.9%
Applied rewrites11.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f640.0
Applied rewrites0.0%
Applied rewrites55.8%
if 1.1e-263 < d Initial program 67.7%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6476.4
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6470.8
lift-/.f64N/A
metadata-eval70.8
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6470.8
Applied rewrites70.8%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6492.7
Applied rewrites92.7%
Final simplification85.1%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0 (sqrt (* l h)))
(t_1
(*
(* (pow (/ d h) (pow 2.0 -1.0)) (pow (/ d l) (pow 2.0 -1.0)))
(-
1.0
(*
(* (pow 2.0 -1.0) (pow (/ (* M_m D_m) (* 2.0 d)) 2.0))
(/ h l))))))
(if (<= t_1 -4e-44)
(*
(* 0.125 (* (* (* M_m M_m) D_m) (/ D_m d)))
(/ (sqrt (/ h l)) (fabs l)))
(if (<= t_1 5e+301)
(* (sqrt (/ d h)) (sqrt (/ d l)))
(if (<= t_1 INFINITY) (/ d t_0) (* (pow (/ t_0 (- d)) -1.0) 1.0))))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = sqrt((l * h));
double t_1 = (pow((d / h), pow(2.0, -1.0)) * pow((d / l), pow(2.0, -1.0))) * (1.0 - ((pow(2.0, -1.0) * pow(((M_m * D_m) / (2.0 * d)), 2.0)) * (h / l)));
double tmp;
if (t_1 <= -4e-44) {
tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (sqrt((h / l)) / fabs(l));
} else if (t_1 <= 5e+301) {
tmp = sqrt((d / h)) * sqrt((d / l));
} else if (t_1 <= ((double) INFINITY)) {
tmp = d / t_0;
} else {
tmp = pow((t_0 / -d), -1.0) * 1.0;
}
return tmp;
}
D_m = Math.abs(D);
M_m = Math.abs(M);
assert d < h && h < l && l < M_m && M_m < D_m;
public static double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = Math.sqrt((l * h));
double t_1 = (Math.pow((d / h), Math.pow(2.0, -1.0)) * Math.pow((d / l), Math.pow(2.0, -1.0))) * (1.0 - ((Math.pow(2.0, -1.0) * Math.pow(((M_m * D_m) / (2.0 * d)), 2.0)) * (h / l)));
double tmp;
if (t_1 <= -4e-44) {
tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (Math.sqrt((h / l)) / Math.abs(l));
} else if (t_1 <= 5e+301) {
tmp = Math.sqrt((d / h)) * Math.sqrt((d / l));
} else if (t_1 <= Double.POSITIVE_INFINITY) {
tmp = d / t_0;
} else {
tmp = Math.pow((t_0 / -d), -1.0) * 1.0;
}
return tmp;
}
D_m = math.fabs(D) M_m = math.fabs(M) [d, h, l, M_m, D_m] = sort([d, h, l, M_m, D_m]) def code(d, h, l, M_m, D_m): t_0 = math.sqrt((l * h)) t_1 = (math.pow((d / h), math.pow(2.0, -1.0)) * math.pow((d / l), math.pow(2.0, -1.0))) * (1.0 - ((math.pow(2.0, -1.0) * math.pow(((M_m * D_m) / (2.0 * d)), 2.0)) * (h / l))) tmp = 0 if t_1 <= -4e-44: tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (math.sqrt((h / l)) / math.fabs(l)) elif t_1 <= 5e+301: tmp = math.sqrt((d / h)) * math.sqrt((d / l)) elif t_1 <= math.inf: tmp = d / t_0 else: tmp = math.pow((t_0 / -d), -1.0) * 1.0 return tmp
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = sqrt(Float64(l * h)) t_1 = Float64(Float64((Float64(d / h) ^ (2.0 ^ -1.0)) * (Float64(d / l) ^ (2.0 ^ -1.0))) * Float64(1.0 - Float64(Float64((2.0 ^ -1.0) * (Float64(Float64(M_m * D_m) / Float64(2.0 * d)) ^ 2.0)) * Float64(h / l)))) tmp = 0.0 if (t_1 <= -4e-44) tmp = Float64(Float64(0.125 * Float64(Float64(Float64(M_m * M_m) * D_m) * Float64(D_m / d))) * Float64(sqrt(Float64(h / l)) / abs(l))); elseif (t_1 <= 5e+301) tmp = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))); elseif (t_1 <= Inf) tmp = Float64(d / t_0); else tmp = Float64((Float64(t_0 / Float64(-d)) ^ -1.0) * 1.0); end return tmp end
D_m = abs(D);
M_m = abs(M);
d, h, l, M_m, D_m = num2cell(sort([d, h, l, M_m, D_m])){:}
function tmp_2 = code(d, h, l, M_m, D_m)
t_0 = sqrt((l * h));
t_1 = (((d / h) ^ (2.0 ^ -1.0)) * ((d / l) ^ (2.0 ^ -1.0))) * (1.0 - (((2.0 ^ -1.0) * (((M_m * D_m) / (2.0 * d)) ^ 2.0)) * (h / l)));
tmp = 0.0;
if (t_1 <= -4e-44)
tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (sqrt((h / l)) / abs(l));
elseif (t_1 <= 5e+301)
tmp = sqrt((d / h)) * sqrt((d / l));
elseif (t_1 <= Inf)
tmp = d / t_0;
else
tmp = ((t_0 / -d) ^ -1.0) * 1.0;
end
tmp_2 = tmp;
end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Power[N[(d / h), $MachinePrecision], N[Power[2.0, -1.0], $MachinePrecision]], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], N[Power[2.0, -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(N[Power[2.0, -1.0], $MachinePrecision] * N[Power[N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(2.0 * d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -4e-44], N[(N[(0.125 * N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(h / l), $MachinePrecision]], $MachinePrecision] / N[Abs[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 5e+301], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], N[(d / t$95$0), $MachinePrecision], N[(N[Power[N[(t$95$0 / (-d)), $MachinePrecision], -1.0], $MachinePrecision] * 1.0), $MachinePrecision]]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\ell \cdot h}\\
t_1 := \left({\left(\frac{d}{h}\right)}^{\left({2}^{-1}\right)} \cdot {\left(\frac{d}{\ell}\right)}^{\left({2}^{-1}\right)}\right) \cdot \left(1 - \left({2}^{-1} \cdot {\left(\frac{M\_m \cdot D\_m}{2 \cdot d}\right)}^{2}\right) \cdot \frac{h}{\ell}\right)\\
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{-44}:\\
\;\;\;\;\left(0.125 \cdot \left(\left(\left(M\_m \cdot M\_m\right) \cdot D\_m\right) \cdot \frac{D\_m}{d}\right)\right) \cdot \frac{\sqrt{\frac{h}{\ell}}}{\left|\ell\right|}\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{+301}:\\
\;\;\;\;\sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;\frac{d}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;{\left(\frac{t\_0}{-d}\right)}^{-1} \cdot 1\\
\end{array}
\end{array}
if (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64))) (pow.f64 (/.f64 d l) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)))) (-.f64 #s(literal 1 binary64) (*.f64 (*.f64 (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64))) (/.f64 h l)))) < -3.99999999999999981e-44Initial program 89.3%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
div-invN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
neg-mul-1N/A
associate-/r*N/A
metadata-evalN/A
lower-/.f6449.8
Applied rewrites49.8%
Taylor expanded in d around 0
associate-*r*N/A
lower-*.f64N/A
Applied rewrites40.7%
Applied rewrites47.4%
if -3.99999999999999981e-44 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64))) (pow.f64 (/.f64 d l) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)))) (-.f64 #s(literal 1 binary64) (*.f64 (*.f64 (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64))) (/.f64 h l)))) < 5.0000000000000004e301Initial program 90.4%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6442.7
Applied rewrites42.7%
Applied rewrites87.4%
Taylor expanded in d around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
lower-sqrt.f64N/A
lower-/.f6482.9
Applied rewrites82.9%
if 5.0000000000000004e301 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64))) (pow.f64 (/.f64 d l) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)))) (-.f64 #s(literal 1 binary64) (*.f64 (*.f64 (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64))) (/.f64 h l)))) < +inf.0Initial program 41.3%
Taylor expanded in d around inf
Applied rewrites41.3%
Taylor expanded in d around -inf
associate-*r*N/A
*-commutativeN/A
mul-1-negN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
remove-double-negN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6465.6
Applied rewrites65.6%
Applied rewrites65.8%
if +inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64))) (pow.f64 (/.f64 d l) (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)))) (-.f64 #s(literal 1 binary64) (*.f64 (*.f64 (/.f64 #s(literal 1 binary64) #s(literal 2 binary64)) (pow.f64 (/.f64 (*.f64 M D) (*.f64 #s(literal 2 binary64) d)) #s(literal 2 binary64))) (/.f64 h l)))) Initial program 0.0%
Taylor expanded in d around inf
Applied rewrites6.8%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
clear-numN/A
un-div-invN/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lower-sqrt.f64N/A
lower-/.f646.8
lift-/.f64N/A
metadata-eval6.8
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f646.8
Applied rewrites6.8%
Taylor expanded in d around -inf
mul-1-negN/A
associate-*l/N/A
*-lft-identityN/A
distribute-neg-frac2N/A
mul-1-negN/A
lower-/.f64N/A
lower-sqrt.f64N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6419.4
Applied rewrites19.4%
Final simplification55.6%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0))
(t_1 (sqrt (- d))))
(if (<= d -1.6e-217)
(* (* (/ t_1 (sqrt (- l))) (sqrt (/ d h))) t_0)
(if (<= d -1.4e-299)
(*
(*
(fma -0.5 (* (/ h l) (* 0.25 (pow (* D_m (/ M_m d)) 2.0))) 1.0)
(/ t_1 (sqrt (- h))))
(sqrt (/ d l)))
(if (<= d 1.1e-263)
(/
(*
(fma (* (* (/ h l) -0.5) 0.25) (pow (* (/ M_m d) D_m) 2.0) 1.0)
(/ d (sqrt h)))
(sqrt l))
(* (/ (/ d (sqrt l)) (sqrt h)) t_0))))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double t_1 = sqrt(-d);
double tmp;
if (d <= -1.6e-217) {
tmp = ((t_1 / sqrt(-l)) * sqrt((d / h))) * t_0;
} else if (d <= -1.4e-299) {
tmp = (fma(-0.5, ((h / l) * (0.25 * pow((D_m * (M_m / d)), 2.0))), 1.0) * (t_1 / sqrt(-h))) * sqrt((d / l));
} else if (d <= 1.1e-263) {
tmp = (fma((((h / l) * -0.5) * 0.25), pow(((M_m / d) * D_m), 2.0), 1.0) * (d / sqrt(h))) / sqrt(l);
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) t_1 = sqrt(Float64(-d)) tmp = 0.0 if (d <= -1.6e-217) tmp = Float64(Float64(Float64(t_1 / sqrt(Float64(-l))) * sqrt(Float64(d / h))) * t_0); elseif (d <= -1.4e-299) tmp = Float64(Float64(fma(-0.5, Float64(Float64(h / l) * Float64(0.25 * (Float64(D_m * Float64(M_m / d)) ^ 2.0))), 1.0) * Float64(t_1 / sqrt(Float64(-h)))) * sqrt(Float64(d / l))); elseif (d <= 1.1e-263) tmp = Float64(Float64(fma(Float64(Float64(Float64(h / l) * -0.5) * 0.25), (Float64(Float64(M_m / d) * D_m) ^ 2.0), 1.0) * Float64(d / sqrt(h))) / sqrt(l)); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[(-d)], $MachinePrecision]}, If[LessEqual[d, -1.6e-217], N[(N[(N[(t$95$1 / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[d, -1.4e-299], N[(N[(N[(-0.5 * N[(N[(h / l), $MachinePrecision] * N[(0.25 * N[Power[N[(D$95$m * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] * N[(t$95$1 / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.1e-263], N[(N[(N[(N[(N[(N[(h / l), $MachinePrecision] * -0.5), $MachinePrecision] * 0.25), $MachinePrecision] * N[Power[N[(N[(M$95$m / d), $MachinePrecision] * D$95$m), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision] * N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
t_1 := \sqrt{-d}\\
\mathbf{if}\;d \leq -1.6 \cdot 10^{-217}:\\
\;\;\;\;\left(\frac{t\_1}{\sqrt{-\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot t\_0\\
\mathbf{elif}\;d \leq -1.4 \cdot 10^{-299}:\\
\;\;\;\;\left(\mathsf{fma}\left(-0.5, \frac{h}{\ell} \cdot \left(0.25 \cdot {\left(D\_m \cdot \frac{M\_m}{d}\right)}^{2}\right), 1\right) \cdot \frac{t\_1}{\sqrt{-h}}\right) \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;d \leq 1.1 \cdot 10^{-263}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\frac{h}{\ell} \cdot -0.5\right) \cdot 0.25, {\left(\frac{M\_m}{d} \cdot D\_m\right)}^{2}, 1\right) \cdot \frac{d}{\sqrt{h}}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if d < -1.6000000000000001e-217Initial program 74.4%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites77.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6477.9
lift-/.f64N/A
metadata-eval77.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6477.9
Applied rewrites77.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites77.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-neg.f64N/A
div-invN/A
associate-*r/N/A
sqrt-divN/A
lift-sqrt.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f6484.6
Applied rewrites84.6%
if -1.6000000000000001e-217 < d < -1.4000000000000001e-299Initial program 31.3%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f640.0
Applied rewrites0.0%
Applied rewrites21.8%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6455.4
Applied rewrites55.4%
if -1.4000000000000001e-299 < d < 1.1e-263Initial program 12.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6433.9
Applied rewrites33.9%
Applied rewrites11.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f640.0
Applied rewrites0.0%
Applied rewrites55.8%
if 1.1e-263 < d Initial program 67.7%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6476.4
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6470.8
lift-/.f64N/A
metadata-eval70.8
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6470.8
Applied rewrites70.8%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6492.7
Applied rewrites92.7%
Final simplification84.4%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0))
(t_1 (sqrt (- d))))
(if (<= d -1.05e-217)
(* (* (/ t_1 (sqrt (- l))) (sqrt (/ d h))) t_0)
(if (<= d -1.4e-299)
(* (/ t_1 (sqrt (* (- h) (/ l d)))) t_0)
(if (<= d 1.1e-263)
(/
(*
(fma (* (* (/ h l) -0.5) 0.25) (pow (* (/ M_m d) D_m) 2.0) 1.0)
(/ d (sqrt h)))
(sqrt l))
(* (/ (/ d (sqrt l)) (sqrt h)) t_0))))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double t_1 = sqrt(-d);
double tmp;
if (d <= -1.05e-217) {
tmp = ((t_1 / sqrt(-l)) * sqrt((d / h))) * t_0;
} else if (d <= -1.4e-299) {
tmp = (t_1 / sqrt((-h * (l / d)))) * t_0;
} else if (d <= 1.1e-263) {
tmp = (fma((((h / l) * -0.5) * 0.25), pow(((M_m / d) * D_m), 2.0), 1.0) * (d / sqrt(h))) / sqrt(l);
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) t_1 = sqrt(Float64(-d)) tmp = 0.0 if (d <= -1.05e-217) tmp = Float64(Float64(Float64(t_1 / sqrt(Float64(-l))) * sqrt(Float64(d / h))) * t_0); elseif (d <= -1.4e-299) tmp = Float64(Float64(t_1 / sqrt(Float64(Float64(-h) * Float64(l / d)))) * t_0); elseif (d <= 1.1e-263) tmp = Float64(Float64(fma(Float64(Float64(Float64(h / l) * -0.5) * 0.25), (Float64(Float64(M_m / d) * D_m) ^ 2.0), 1.0) * Float64(d / sqrt(h))) / sqrt(l)); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[(-d)], $MachinePrecision]}, If[LessEqual[d, -1.05e-217], N[(N[(N[(t$95$1 / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[d, -1.4e-299], N[(N[(t$95$1 / N[Sqrt[N[((-h) * N[(l / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[d, 1.1e-263], N[(N[(N[(N[(N[(N[(h / l), $MachinePrecision] * -0.5), $MachinePrecision] * 0.25), $MachinePrecision] * N[Power[N[(N[(M$95$m / d), $MachinePrecision] * D$95$m), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision] * N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
t_1 := \sqrt{-d}\\
\mathbf{if}\;d \leq -1.05 \cdot 10^{-217}:\\
\;\;\;\;\left(\frac{t\_1}{\sqrt{-\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot t\_0\\
\mathbf{elif}\;d \leq -1.4 \cdot 10^{-299}:\\
\;\;\;\;\frac{t\_1}{\sqrt{\left(-h\right) \cdot \frac{\ell}{d}}} \cdot t\_0\\
\mathbf{elif}\;d \leq 1.1 \cdot 10^{-263}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\frac{h}{\ell} \cdot -0.5\right) \cdot 0.25, {\left(\frac{M\_m}{d} \cdot D\_m\right)}^{2}, 1\right) \cdot \frac{d}{\sqrt{h}}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if d < -1.05e-217Initial program 74.4%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites77.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6477.9
lift-/.f64N/A
metadata-eval77.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6477.9
Applied rewrites77.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites77.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-neg.f64N/A
div-invN/A
associate-*r/N/A
sqrt-divN/A
lift-sqrt.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f6484.6
Applied rewrites84.6%
if -1.05e-217 < d < -1.4000000000000001e-299Initial program 31.3%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites22.0%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6422.0
lift-/.f64N/A
metadata-eval22.0
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6422.0
Applied rewrites22.0%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites21.8%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-/.f64N/A
clear-numN/A
frac-timesN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-neg.f64N/A
lower-/.f6455.1
Applied rewrites55.1%
if -1.4000000000000001e-299 < d < 1.1e-263Initial program 12.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6433.9
Applied rewrites33.9%
Applied rewrites11.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f640.0
Applied rewrites0.0%
Applied rewrites55.8%
if 1.1e-263 < d Initial program 67.7%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6476.4
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6470.8
lift-/.f64N/A
metadata-eval70.8
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6470.8
Applied rewrites70.8%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites70.8%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6492.7
Applied rewrites92.7%
Final simplification84.3%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0))
(t_1 (* (/ M_m d) D_m)))
(if (<= h -2.2e+177)
(* (/ (sqrt (* (/ (- d) l) d)) (sqrt (- h))) t_0)
(if (<= h -1e-310)
(*
(* (fma -0.5 (* (* (* (/ h l) 0.25) t_1) t_1) 1.0) (sqrt (/ d h)))
(/ (sqrt (- d)) (sqrt (- l))))
(* (/ (/ d (sqrt l)) (sqrt h)) t_0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double t_1 = (M_m / d) * D_m;
double tmp;
if (h <= -2.2e+177) {
tmp = (sqrt(((-d / l) * d)) / sqrt(-h)) * t_0;
} else if (h <= -1e-310) {
tmp = (fma(-0.5, ((((h / l) * 0.25) * t_1) * t_1), 1.0) * sqrt((d / h))) * (sqrt(-d) / sqrt(-l));
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) t_1 = Float64(Float64(M_m / d) * D_m) tmp = 0.0 if (h <= -2.2e+177) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(-d) / l) * d)) / sqrt(Float64(-h))) * t_0); elseif (h <= -1e-310) tmp = Float64(Float64(fma(-0.5, Float64(Float64(Float64(Float64(h / l) * 0.25) * t_1) * t_1), 1.0) * sqrt(Float64(d / h))) * Float64(sqrt(Float64(-d)) / sqrt(Float64(-l)))); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, Block[{t$95$1 = N[(N[(M$95$m / d), $MachinePrecision] * D$95$m), $MachinePrecision]}, If[LessEqual[h, -2.2e+177], N[(N[(N[Sqrt[N[(N[((-d) / l), $MachinePrecision] * d), $MachinePrecision]], $MachinePrecision] / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[h, -1e-310], N[(N[(N[(-0.5 * N[(N[(N[(N[(h / l), $MachinePrecision] * 0.25), $MachinePrecision] * t$95$1), $MachinePrecision] * t$95$1), $MachinePrecision] + 1.0), $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[(-d)], $MachinePrecision] / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
t_1 := \frac{M\_m}{d} \cdot D\_m\\
\mathbf{if}\;h \leq -2.2 \cdot 10^{+177}:\\
\;\;\;\;\frac{\sqrt{\frac{-d}{\ell} \cdot d}}{\sqrt{-h}} \cdot t\_0\\
\mathbf{elif}\;h \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(\mathsf{fma}\left(-0.5, \left(\left(\frac{h}{\ell} \cdot 0.25\right) \cdot t\_1\right) \cdot t\_1, 1\right) \cdot \sqrt{\frac{d}{h}}\right) \cdot \frac{\sqrt{-d}}{\sqrt{-\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if h < -2.1999999999999998e177Initial program 44.9%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites46.4%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6446.4
lift-/.f64N/A
metadata-eval46.4
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6446.4
Applied rewrites46.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites46.4%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
associate-*r/N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-neg.f6468.7
Applied rewrites68.7%
if -2.1999999999999998e177 < h < -9.999999999999969e-311Initial program 71.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f640.0
Applied rewrites0.0%
Applied rewrites69.8%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6473.3
Applied rewrites73.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f6476.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6476.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6476.0
Applied rewrites76.0%
if -9.999999999999969e-311 < h Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6487.4
Applied rewrites87.4%
Final simplification80.5%
D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. (FPCore (d h l M_m D_m) :precision binary64 (if (<= l 9.5e-253) (* (pow (/ (sqrt (* l h)) (- d)) -1.0) 1.0) (/ d (* (sqrt l) (sqrt h)))))
D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= 9.5e-253) {
tmp = pow((sqrt((l * h)) / -d), -1.0) * 1.0;
} else {
tmp = d / (sqrt(l) * sqrt(h));
}
return tmp;
}
D_m = abs(d)
M_m = abs(m)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
real(8) function code(d, h, l, m_m, d_m)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
real(8) :: tmp
if (l <= 9.5d-253) then
tmp = ((sqrt((l * h)) / -d) ** (-1.0d0)) * 1.0d0
else
tmp = d / (sqrt(l) * sqrt(h))
end if
code = tmp
end function
D_m = Math.abs(D);
M_m = Math.abs(M);
assert d < h && h < l && l < M_m && M_m < D_m;
public static double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= 9.5e-253) {
tmp = Math.pow((Math.sqrt((l * h)) / -d), -1.0) * 1.0;
} else {
tmp = d / (Math.sqrt(l) * Math.sqrt(h));
}
return tmp;
}
D_m = math.fabs(D) M_m = math.fabs(M) [d, h, l, M_m, D_m] = sort([d, h, l, M_m, D_m]) def code(d, h, l, M_m, D_m): tmp = 0 if l <= 9.5e-253: tmp = math.pow((math.sqrt((l * h)) / -d), -1.0) * 1.0 else: tmp = d / (math.sqrt(l) * math.sqrt(h)) return tmp
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) tmp = 0.0 if (l <= 9.5e-253) tmp = Float64((Float64(sqrt(Float64(l * h)) / Float64(-d)) ^ -1.0) * 1.0); else tmp = Float64(d / Float64(sqrt(l) * sqrt(h))); end return tmp end
D_m = abs(D);
M_m = abs(M);
d, h, l, M_m, D_m = num2cell(sort([d, h, l, M_m, D_m])){:}
function tmp_2 = code(d, h, l, M_m, D_m)
tmp = 0.0;
if (l <= 9.5e-253)
tmp = ((sqrt((l * h)) / -d) ^ -1.0) * 1.0;
else
tmp = d / (sqrt(l) * sqrt(h));
end
tmp_2 = tmp;
end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := If[LessEqual[l, 9.5e-253], N[(N[Power[N[(N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision] / (-d)), $MachinePrecision], -1.0], $MachinePrecision] * 1.0), $MachinePrecision], N[(d / N[(N[Sqrt[l], $MachinePrecision] * N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq 9.5 \cdot 10^{-253}:\\
\;\;\;\;{\left(\frac{\sqrt{\ell \cdot h}}{-d}\right)}^{-1} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{\ell} \cdot \sqrt{h}}\\
\end{array}
\end{array}
if l < 9.5e-253Initial program 67.1%
Taylor expanded in d around inf
Applied rewrites30.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
clear-numN/A
un-div-invN/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lower-sqrt.f64N/A
lower-/.f6431.0
lift-/.f64N/A
metadata-eval31.0
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6431.0
Applied rewrites31.0%
Taylor expanded in d around -inf
mul-1-negN/A
associate-*l/N/A
*-lft-identityN/A
distribute-neg-frac2N/A
mul-1-negN/A
lower-/.f64N/A
lower-sqrt.f64N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6439.9
Applied rewrites39.9%
if 9.5e-253 < l Initial program 62.7%
Taylor expanded in d around inf
Applied rewrites37.2%
Taylor expanded in d around -inf
associate-*r*N/A
*-commutativeN/A
mul-1-negN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
remove-double-negN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6448.8
Applied rewrites48.8%
Applied rewrites48.8%
Applied rewrites54.2%
Final simplification45.7%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0))
(t_1 (sqrt (- d))))
(if (<= d -1.05e-217)
(* (* (/ t_1 (sqrt (- l))) (sqrt (/ d h))) t_0)
(if (<= d -1.4e-299)
(* (/ t_1 (sqrt (* (- h) (/ l d)))) t_0)
(* (/ (/ d (sqrt l)) (sqrt h)) t_0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double t_1 = sqrt(-d);
double tmp;
if (d <= -1.05e-217) {
tmp = ((t_1 / sqrt(-l)) * sqrt((d / h))) * t_0;
} else if (d <= -1.4e-299) {
tmp = (t_1 / sqrt((-h * (l / d)))) * t_0;
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) t_1 = sqrt(Float64(-d)) tmp = 0.0 if (d <= -1.05e-217) tmp = Float64(Float64(Float64(t_1 / sqrt(Float64(-l))) * sqrt(Float64(d / h))) * t_0); elseif (d <= -1.4e-299) tmp = Float64(Float64(t_1 / sqrt(Float64(Float64(-h) * Float64(l / d)))) * t_0); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[(-d)], $MachinePrecision]}, If[LessEqual[d, -1.05e-217], N[(N[(N[(t$95$1 / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[d, -1.4e-299], N[(N[(t$95$1 / N[Sqrt[N[((-h) * N[(l / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
t_1 := \sqrt{-d}\\
\mathbf{if}\;d \leq -1.05 \cdot 10^{-217}:\\
\;\;\;\;\left(\frac{t\_1}{\sqrt{-\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot t\_0\\
\mathbf{elif}\;d \leq -1.4 \cdot 10^{-299}:\\
\;\;\;\;\frac{t\_1}{\sqrt{\left(-h\right) \cdot \frac{\ell}{d}}} \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if d < -1.05e-217Initial program 74.4%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites77.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6477.9
lift-/.f64N/A
metadata-eval77.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6477.9
Applied rewrites77.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites77.9%
lift-sqrt.f64N/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-neg.f64N/A
div-invN/A
associate-*r/N/A
sqrt-divN/A
lift-sqrt.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f6484.6
Applied rewrites84.6%
if -1.05e-217 < d < -1.4000000000000001e-299Initial program 31.3%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites22.0%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6422.0
lift-/.f64N/A
metadata-eval22.0
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6422.0
Applied rewrites22.0%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites21.8%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-/.f64N/A
clear-numN/A
frac-timesN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-neg.f64N/A
lower-/.f6455.1
Applied rewrites55.1%
if -1.4000000000000001e-299 < d Initial program 63.6%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.4%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.4
lift-/.f64N/A
metadata-eval66.4
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.4
Applied rewrites66.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.4%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6486.7
Applied rewrites86.7%
Final simplification82.8%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))
(if (<= h -1e+178)
(* (/ (sqrt (* (/ (- d) l) d)) (sqrt (- h))) t_0)
(if (<= h -1e-310)
(* (* (sqrt (/ d l)) (sqrt (/ d h))) t_0)
(* (/ (/ d (sqrt l)) (sqrt h)) t_0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double tmp;
if (h <= -1e+178) {
tmp = (sqrt(((-d / l) * d)) / sqrt(-h)) * t_0;
} else if (h <= -1e-310) {
tmp = (sqrt((d / l)) * sqrt((d / h))) * t_0;
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) tmp = 0.0 if (h <= -1e+178) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(-d) / l) * d)) / sqrt(Float64(-h))) * t_0); elseif (h <= -1e-310) tmp = Float64(Float64(sqrt(Float64(d / l)) * sqrt(Float64(d / h))) * t_0); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, If[LessEqual[h, -1e+178], N[(N[(N[Sqrt[N[(N[((-d) / l), $MachinePrecision] * d), $MachinePrecision]], $MachinePrecision] / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[h, -1e-310], N[(N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\mathbf{if}\;h \leq -1 \cdot 10^{+178}:\\
\;\;\;\;\frac{\sqrt{\frac{-d}{\ell} \cdot d}}{\sqrt{-h}} \cdot t\_0\\
\mathbf{elif}\;h \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(\sqrt{\frac{d}{\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if h < -1.0000000000000001e178Initial program 44.9%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites46.4%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6446.4
lift-/.f64N/A
metadata-eval46.4
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6446.4
Applied rewrites46.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites46.4%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
associate-*r/N/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-neg.f6468.7
Applied rewrites68.7%
if -1.0000000000000001e178 < h < -9.999999999999969e-311Initial program 71.6%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites72.7%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6472.7
lift-/.f64N/A
metadata-eval72.7
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6472.7
Applied rewrites72.7%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites72.7%
if -9.999999999999969e-311 < h Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6487.4
Applied rewrites87.4%
Final simplification79.1%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))
(if (<= d -3.9e+150)
(* (- d) (sqrt (pow (* l h) -1.0)))
(if (<= d -1.4e-299)
(* (sqrt (* (/ d h) (/ d l))) t_0)
(* (/ (/ d (sqrt l)) (sqrt h)) t_0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double tmp;
if (d <= -3.9e+150) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else if (d <= -1.4e-299) {
tmp = sqrt(((d / h) * (d / l))) * t_0;
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) tmp = 0.0 if (d <= -3.9e+150) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); elseif (d <= -1.4e-299) tmp = Float64(sqrt(Float64(Float64(d / h) * Float64(d / l))) * t_0); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, If[LessEqual[d, -3.9e+150], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, -1.4e-299], N[(N[Sqrt[N[(N[(d / h), $MachinePrecision] * N[(d / l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\mathbf{if}\;d \leq -3.9 \cdot 10^{+150}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{elif}\;d \leq -1.4 \cdot 10^{-299}:\\
\;\;\;\;\sqrt{\frac{d}{h} \cdot \frac{d}{\ell}} \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if d < -3.89999999999999991e150Initial program 65.1%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6467.5
Applied rewrites67.5%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6469.2
Applied rewrites69.2%
if -3.89999999999999991e150 < d < -1.4000000000000001e-299Initial program 67.5%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites68.7%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6468.7
lift-/.f64N/A
metadata-eval68.7
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6468.7
Applied rewrites68.7%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites68.6%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lower-sqrt.f64N/A
lower-*.f6456.9
Applied rewrites56.9%
if -1.4000000000000001e-299 < d Initial program 63.6%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.4%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.4
lift-/.f64N/A
metadata-eval66.4
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.4
Applied rewrites66.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.4%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6486.7
Applied rewrites86.7%
Final simplification72.7%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))
(if (<= d -3.9e+150)
(* (- d) (sqrt (pow (* l h) -1.0)))
(if (<= d -4.4e-299)
(* (sqrt (* (/ d h) (/ d l))) t_0)
(* (/ d (sqrt (* h l))) t_0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double tmp;
if (d <= -3.9e+150) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else if (d <= -4.4e-299) {
tmp = sqrt(((d / h) * (d / l))) * t_0;
} else {
tmp = (d / sqrt((h * l))) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) tmp = 0.0 if (d <= -3.9e+150) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); elseif (d <= -4.4e-299) tmp = Float64(sqrt(Float64(Float64(d / h) * Float64(d / l))) * t_0); else tmp = Float64(Float64(d / sqrt(Float64(h * l))) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, If[LessEqual[d, -3.9e+150], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, -4.4e-299], N[(N[Sqrt[N[(N[(d / h), $MachinePrecision] * N[(d / l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(d / N[Sqrt[N[(h * l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\mathbf{if}\;d \leq -3.9 \cdot 10^{+150}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{elif}\;d \leq -4.4 \cdot 10^{-299}:\\
\;\;\;\;\sqrt{\frac{d}{h} \cdot \frac{d}{\ell}} \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{h \cdot \ell}} \cdot t\_0\\
\end{array}
\end{array}
if d < -3.89999999999999991e150Initial program 65.1%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6467.5
Applied rewrites67.5%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6469.2
Applied rewrites69.2%
if -3.89999999999999991e150 < d < -4.3999999999999999e-299Initial program 67.5%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites68.7%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6468.7
lift-/.f64N/A
metadata-eval68.7
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6468.7
Applied rewrites68.7%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites68.6%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lower-sqrt.f64N/A
lower-*.f6456.9
Applied rewrites56.9%
if -4.3999999999999999e-299 < d Initial program 63.6%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.4%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.4
lift-/.f64N/A
metadata-eval66.4
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.4
Applied rewrites66.4%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.4%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
*-commutativeN/A
lift-*.f64N/A
sqrt-divN/A
sqrt-unprodN/A
rem-square-sqrtN/A
lift-sqrt.f64N/A
lift-/.f6480.6
lift-*.f64N/A
*-commutativeN/A
lower-*.f6480.6
Applied rewrites80.6%
Final simplification69.8%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(if (<= l -9e-9)
(* (- d) (sqrt (pow (* l h) -1.0)))
(if (<= l -1e-310)
(*
(* 0.125 (* (* (* M_m M_m) D_m) (/ D_m d)))
(/ (sqrt (/ h l)) (fabs l)))
(*
(/ d (sqrt (* h l)))
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= -9e-9) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else if (l <= -1e-310) {
tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (sqrt((h / l)) / fabs(l));
} else {
tmp = (d / sqrt((h * l))) * fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) tmp = 0.0 if (l <= -9e-9) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); elseif (l <= -1e-310) tmp = Float64(Float64(0.125 * Float64(Float64(Float64(M_m * M_m) * D_m) * Float64(D_m / d))) * Float64(sqrt(Float64(h / l)) / abs(l))); else tmp = Float64(Float64(d / sqrt(Float64(h * l))) * fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0)); end return tmp end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := If[LessEqual[l, -9e-9], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -1e-310], N[(N[(0.125 * N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(h / l), $MachinePrecision]], $MachinePrecision] / N[Abs[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(d / N[Sqrt[N[(h * l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq -9 \cdot 10^{-9}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{elif}\;\ell \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(0.125 \cdot \left(\left(\left(M\_m \cdot M\_m\right) \cdot D\_m\right) \cdot \frac{D\_m}{d}\right)\right) \cdot \frac{\sqrt{\frac{h}{\ell}}}{\left|\ell\right|}\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{h \cdot \ell}} \cdot \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\end{array}
\end{array}
if l < -8.99999999999999953e-9Initial program 57.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6461.4
Applied rewrites61.4%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6455.3
Applied rewrites55.3%
if -8.99999999999999953e-9 < l < -9.999999999999969e-311Initial program 74.4%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
div-invN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
neg-mul-1N/A
associate-/r*N/A
metadata-evalN/A
lower-/.f6475.7
Applied rewrites75.7%
Taylor expanded in d around 0
associate-*r*N/A
lower-*.f64N/A
Applied rewrites55.5%
Applied rewrites58.3%
if -9.999999999999969e-311 < l Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
*-commutativeN/A
lift-*.f64N/A
sqrt-divN/A
sqrt-unprodN/A
rem-square-sqrtN/A
lift-sqrt.f64N/A
lift-/.f6481.2
lift-*.f64N/A
*-commutativeN/A
lower-*.f6481.2
Applied rewrites81.2%
Final simplification68.2%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(if (<= l -9e-9)
(* (- d) (sqrt (pow (* l h) -1.0)))
(if (<= l -1e-310)
(*
(* 0.125 (* (* (* M_m M_m) D_m) (/ D_m d)))
(/ (sqrt (/ h l)) (fabs l)))
(*
(fma
(* (* 0.25 (/ M_m d)) (* D_m h))
(* (* -0.5 (/ D_m d)) (/ M_m l))
1.0)
(/ d (sqrt (* h l)))))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= -9e-9) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else if (l <= -1e-310) {
tmp = (0.125 * (((M_m * M_m) * D_m) * (D_m / d))) * (sqrt((h / l)) / fabs(l));
} else {
tmp = fma(((0.25 * (M_m / d)) * (D_m * h)), ((-0.5 * (D_m / d)) * (M_m / l)), 1.0) * (d / sqrt((h * l)));
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) tmp = 0.0 if (l <= -9e-9) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); elseif (l <= -1e-310) tmp = Float64(Float64(0.125 * Float64(Float64(Float64(M_m * M_m) * D_m) * Float64(D_m / d))) * Float64(sqrt(Float64(h / l)) / abs(l))); else tmp = Float64(fma(Float64(Float64(0.25 * Float64(M_m / d)) * Float64(D_m * h)), Float64(Float64(-0.5 * Float64(D_m / d)) * Float64(M_m / l)), 1.0) * Float64(d / sqrt(Float64(h * l)))); end return tmp end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := If[LessEqual[l, -9e-9], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -1e-310], N[(N[(0.125 * N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * D$95$m), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(h / l), $MachinePrecision]], $MachinePrecision] / N[Abs[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(0.25 * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision] * N[(D$95$m * h), $MachinePrecision]), $MachinePrecision] * N[(N[(-0.5 * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision] * N[(M$95$m / l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] * N[(d / N[Sqrt[N[(h * l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq -9 \cdot 10^{-9}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{elif}\;\ell \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(0.125 \cdot \left(\left(\left(M\_m \cdot M\_m\right) \cdot D\_m\right) \cdot \frac{D\_m}{d}\right)\right) \cdot \frac{\sqrt{\frac{h}{\ell}}}{\left|\ell\right|}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(0.25 \cdot \frac{M\_m}{d}\right) \cdot \left(D\_m \cdot h\right), \left(-0.5 \cdot \frac{D\_m}{d}\right) \cdot \frac{M\_m}{\ell}, 1\right) \cdot \frac{d}{\sqrt{h \cdot \ell}}\\
\end{array}
\end{array}
if l < -8.99999999999999953e-9Initial program 57.6%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6461.4
Applied rewrites61.4%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6455.3
Applied rewrites55.3%
if -8.99999999999999953e-9 < l < -9.999999999999969e-311Initial program 74.4%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
div-invN/A
sqrt-prodN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
neg-mul-1N/A
associate-/r*N/A
metadata-evalN/A
lower-/.f6475.7
Applied rewrites75.7%
Taylor expanded in d around 0
associate-*r*N/A
lower-*.f64N/A
Applied rewrites55.5%
Applied rewrites58.3%
if -9.999999999999969e-311 < l Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
Applied rewrites77.8%
Final simplification66.6%
D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. (FPCore (d h l M_m D_m) :precision binary64 (if (<= l 4.5e-252) (* (- d) (sqrt (pow (* l h) -1.0))) (/ d (* (sqrt l) (sqrt h)))))
D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= 4.5e-252) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else {
tmp = d / (sqrt(l) * sqrt(h));
}
return tmp;
}
D_m = abs(d)
M_m = abs(m)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
real(8) function code(d, h, l, m_m, d_m)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
real(8) :: tmp
if (l <= 4.5d-252) then
tmp = -d * sqrt(((l * h) ** (-1.0d0)))
else
tmp = d / (sqrt(l) * sqrt(h))
end if
code = tmp
end function
D_m = Math.abs(D);
M_m = Math.abs(M);
assert d < h && h < l && l < M_m && M_m < D_m;
public static double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (l <= 4.5e-252) {
tmp = -d * Math.sqrt(Math.pow((l * h), -1.0));
} else {
tmp = d / (Math.sqrt(l) * Math.sqrt(h));
}
return tmp;
}
D_m = math.fabs(D) M_m = math.fabs(M) [d, h, l, M_m, D_m] = sort([d, h, l, M_m, D_m]) def code(d, h, l, M_m, D_m): tmp = 0 if l <= 4.5e-252: tmp = -d * math.sqrt(math.pow((l * h), -1.0)) else: tmp = d / (math.sqrt(l) * math.sqrt(h)) return tmp
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) tmp = 0.0 if (l <= 4.5e-252) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); else tmp = Float64(d / Float64(sqrt(l) * sqrt(h))); end return tmp end
D_m = abs(D);
M_m = abs(M);
d, h, l, M_m, D_m = num2cell(sort([d, h, l, M_m, D_m])){:}
function tmp_2 = code(d, h, l, M_m, D_m)
tmp = 0.0;
if (l <= 4.5e-252)
tmp = -d * sqrt(((l * h) ^ -1.0));
else
tmp = d / (sqrt(l) * sqrt(h));
end
tmp_2 = tmp;
end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := If[LessEqual[l, 4.5e-252], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(d / N[(N[Sqrt[l], $MachinePrecision] * N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq 4.5 \cdot 10^{-252}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{\ell} \cdot \sqrt{h}}\\
\end{array}
\end{array}
if l < 4.5000000000000002e-252Initial program 67.1%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6462.1
Applied rewrites62.1%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6439.7
Applied rewrites39.7%
if 4.5000000000000002e-252 < l Initial program 62.7%
Taylor expanded in d around inf
Applied rewrites37.2%
Taylor expanded in d around -inf
associate-*r*N/A
*-commutativeN/A
mul-1-negN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
remove-double-negN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6448.8
Applied rewrites48.8%
Applied rewrites48.8%
Applied rewrites54.2%
Final simplification45.6%
D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. (FPCore (d h l M_m D_m) :precision binary64 (if (<= d 1e-50) (* (- d) (sqrt (pow (* l h) -1.0))) (/ d (sqrt (* l h)))))
D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (d <= 1e-50) {
tmp = -d * sqrt(pow((l * h), -1.0));
} else {
tmp = d / sqrt((l * h));
}
return tmp;
}
D_m = abs(d)
M_m = abs(m)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
real(8) function code(d, h, l, m_m, d_m)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
real(8) :: tmp
if (d <= 1d-50) then
tmp = -d * sqrt(((l * h) ** (-1.0d0)))
else
tmp = d / sqrt((l * h))
end if
code = tmp
end function
D_m = Math.abs(D);
M_m = Math.abs(M);
assert d < h && h < l && l < M_m && M_m < D_m;
public static double code(double d, double h, double l, double M_m, double D_m) {
double tmp;
if (d <= 1e-50) {
tmp = -d * Math.sqrt(Math.pow((l * h), -1.0));
} else {
tmp = d / Math.sqrt((l * h));
}
return tmp;
}
D_m = math.fabs(D) M_m = math.fabs(M) [d, h, l, M_m, D_m] = sort([d, h, l, M_m, D_m]) def code(d, h, l, M_m, D_m): tmp = 0 if d <= 1e-50: tmp = -d * math.sqrt(math.pow((l * h), -1.0)) else: tmp = d / math.sqrt((l * h)) return tmp
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) tmp = 0.0 if (d <= 1e-50) tmp = Float64(Float64(-d) * sqrt((Float64(l * h) ^ -1.0))); else tmp = Float64(d / sqrt(Float64(l * h))); end return tmp end
D_m = abs(D);
M_m = abs(M);
d, h, l, M_m, D_m = num2cell(sort([d, h, l, M_m, D_m])){:}
function tmp_2 = code(d, h, l, M_m, D_m)
tmp = 0.0;
if (d <= 1e-50)
tmp = -d * sqrt(((l * h) ^ -1.0));
else
tmp = d / sqrt((l * h));
end
tmp_2 = tmp;
end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := If[LessEqual[d, 1e-50], N[((-d) * N[Sqrt[N[Power[N[(l * h), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;d \leq 10^{-50}:\\
\;\;\;\;\left(-d\right) \cdot \sqrt{{\left(\ell \cdot h\right)}^{-1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{\ell \cdot h}}\\
\end{array}
\end{array}
if d < 1.00000000000000001e-50Initial program 63.2%
lift-pow.f64N/A
lift-/.f64N/A
metadata-evalN/A
unpow1/2N/A
lift-/.f64N/A
frac-2negN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-neg.f6451.0
Applied rewrites51.0%
Taylor expanded in d around -inf
associate-*r*N/A
rem-square-sqrtN/A
unpow2N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6435.3
Applied rewrites35.3%
if 1.00000000000000001e-50 < d Initial program 70.7%
Taylor expanded in d around inf
Applied rewrites48.3%
Taylor expanded in d around -inf
associate-*r*N/A
*-commutativeN/A
mul-1-negN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
remove-double-negN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6465.0
Applied rewrites65.0%
Applied rewrites65.1%
Final simplification43.6%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))
(if (<= l -1e-310)
(* (/ (sqrt (- d)) (sqrt (* (- h) (/ l d)))) t_0)
(* (/ (/ d (sqrt l)) (sqrt h)) t_0))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double tmp;
if (l <= -1e-310) {
tmp = (sqrt(-d) / sqrt((-h * (l / d)))) * t_0;
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) tmp = 0.0 if (l <= -1e-310) tmp = Float64(Float64(sqrt(Float64(-d)) / sqrt(Float64(Float64(-h) * Float64(l / d)))) * t_0); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, If[LessEqual[l, -1e-310], N[(N[(N[Sqrt[(-d)], $MachinePrecision] / N[Sqrt[N[((-h) * N[(l / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\mathbf{if}\;\ell \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\frac{\sqrt{-d}}{\sqrt{\left(-h\right) \cdot \frac{\ell}{d}}} \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if l < -9.999999999999969e-311Initial program 66.3%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites67.5%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6467.5
lift-/.f64N/A
metadata-eval67.5
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6467.5
Applied rewrites67.5%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites67.5%
lift-*.f64N/A
*-commutativeN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-unprodN/A
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
lift-/.f64N/A
clear-numN/A
frac-timesN/A
sqrt-divN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-*.f64N/A
lower-neg.f64N/A
lower-/.f6472.3
Applied rewrites72.3%
if -9.999999999999969e-311 < l Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6487.4
Applied rewrites87.4%
Final simplification79.3%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0
(fma
(* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) (* (/ M_m d) (* 0.25 D_m)))
h
1.0)))
(if (<= h -1e-310)
(* (* (sqrt (/ d l)) (sqrt (/ d h))) t_0)
(* (/ (/ d (sqrt l)) (sqrt h)) t_0))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = fma((((D_m * ((0.5 / d) * M_m)) / -l) * ((M_m / d) * (0.25 * D_m))), h, 1.0);
double tmp;
if (h <= -1e-310) {
tmp = (sqrt((d / l)) * sqrt((d / h))) * t_0;
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * t_0;
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * Float64(Float64(M_m / d) * Float64(0.25 * D_m))), h, 1.0) tmp = 0.0 if (h <= -1e-310) tmp = Float64(Float64(sqrt(Float64(d / l)) * sqrt(Float64(d / h))) * t_0); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * t_0); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * h + 1.0), $MachinePrecision]}, If[LessEqual[h, -1e-310], N[(N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot \left(\frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\right), h, 1\right)\\
\mathbf{if}\;h \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(\sqrt{\frac{d}{\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot t\_0\\
\end{array}
\end{array}
if h < -9.999999999999969e-311Initial program 66.3%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites67.5%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6467.5
lift-/.f64N/A
metadata-eval67.5
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6467.5
Applied rewrites67.5%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites67.5%
if -9.999999999999969e-311 < h Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6487.4
Applied rewrites87.4%
Final simplification76.8%
D_m = (fabs.f64 D)
M_m = (fabs.f64 M)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
(FPCore (d h l M_m D_m)
:precision binary64
(let* ((t_0 (* (/ M_m d) (* 0.25 D_m))))
(if (<= l -1e-310)
(*
(* (sqrt (/ d l)) (sqrt (/ d h)))
(fma (* (/ (* (/ (* M_m D_m) d) -0.5) l) t_0) h 1.0))
(*
(/ (/ d (sqrt l)) (sqrt h))
(fma (* (/ (* D_m (* (/ 0.5 d) M_m)) (- l)) t_0) h 1.0)))))D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
double t_0 = (M_m / d) * (0.25 * D_m);
double tmp;
if (l <= -1e-310) {
tmp = (sqrt((d / l)) * sqrt((d / h))) * fma((((((M_m * D_m) / d) * -0.5) / l) * t_0), h, 1.0);
} else {
tmp = ((d / sqrt(l)) / sqrt(h)) * fma((((D_m * ((0.5 / d) * M_m)) / -l) * t_0), h, 1.0);
}
return tmp;
}
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) t_0 = Float64(Float64(M_m / d) * Float64(0.25 * D_m)) tmp = 0.0 if (l <= -1e-310) tmp = Float64(Float64(sqrt(Float64(d / l)) * sqrt(Float64(d / h))) * fma(Float64(Float64(Float64(Float64(Float64(M_m * D_m) / d) * -0.5) / l) * t_0), h, 1.0)); else tmp = Float64(Float64(Float64(d / sqrt(l)) / sqrt(h)) * fma(Float64(Float64(Float64(D_m * Float64(Float64(0.5 / d) * M_m)) / Float64(-l)) * t_0), h, 1.0)); end return tmp end
D_m = N[Abs[D], $MachinePrecision]
M_m = N[Abs[M], $MachinePrecision]
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
code[d_, h_, l_, M$95$m_, D$95$m_] := Block[{t$95$0 = N[(N[(M$95$m / d), $MachinePrecision] * N[(0.25 * D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[l, -1e-310], N[(N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision] * -0.5), $MachinePrecision] / l), $MachinePrecision] * t$95$0), $MachinePrecision] * h + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(d / N[Sqrt[l], $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[(D$95$m * N[(N[(0.5 / d), $MachinePrecision] * M$95$m), $MachinePrecision]), $MachinePrecision] / (-l)), $MachinePrecision] * t$95$0), $MachinePrecision] * h + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{M\_m}{d} \cdot \left(0.25 \cdot D\_m\right)\\
\mathbf{if}\;\ell \leq -1 \cdot 10^{-310}:\\
\;\;\;\;\left(\sqrt{\frac{d}{\ell}} \cdot \sqrt{\frac{d}{h}}\right) \cdot \mathsf{fma}\left(\frac{\frac{M\_m \cdot D\_m}{d} \cdot -0.5}{\ell} \cdot t\_0, h, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}} \cdot \mathsf{fma}\left(\frac{D\_m \cdot \left(\frac{0.5}{d} \cdot M\_m\right)}{-\ell} \cdot t\_0, h, 1\right)\\
\end{array}
\end{array}
if l < -9.999999999999969e-311Initial program 66.3%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites67.5%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f640.0
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6467.5
lift-/.f64N/A
metadata-eval67.5
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6467.5
Applied rewrites67.5%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites67.5%
Taylor expanded in d around 0
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6467.4
Applied rewrites67.4%
if -9.999999999999969e-311 < l Initial program 64.1%
lift-*.f64N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-*.f64N/A
*-commutativeN/A
lift-pow.f64N/A
unpow2N/A
associate-*l*N/A
div-invN/A
times-fracN/A
lower-*.f64N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-/.f64N/A
metadata-evalN/A
lift-pow.f64N/A
unpow1/2N/A
lift-/.f64N/A
sqrt-undivN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
*-commutativeN/A
lower-*.f6474.7
lift-/.f64N/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lift-/.f64N/A
lower-sqrt.f6466.9
lift-/.f64N/A
metadata-eval66.9
lift-pow.f64N/A
unpow1/2N/A
lower-sqrt.f6466.9
Applied rewrites66.9%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
lift-*.f64N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lift-pow.f64N/A
unpow-1N/A
remove-double-divN/A
associate-*r*N/A
Applied rewrites66.9%
lift-*.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
lift-/.f64N/A
sqrt-divN/A
lift-sqrt.f64N/A
frac-timesN/A
lift-sqrt.f64N/A
lift-sqrt.f64N/A
rem-square-sqrtN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f6487.4
Applied rewrites87.4%
Final simplification76.7%
D_m = (fabs.f64 D) M_m = (fabs.f64 M) NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. (FPCore (d h l M_m D_m) :precision binary64 (/ d (sqrt (* l h))))
D_m = fabs(D);
M_m = fabs(M);
assert(d < h && h < l && l < M_m && M_m < D_m);
double code(double d, double h, double l, double M_m, double D_m) {
return d / sqrt((l * h));
}
D_m = abs(d)
M_m = abs(m)
NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function.
real(8) function code(d, h, l, m_m, d_m)
real(8), intent (in) :: d
real(8), intent (in) :: h
real(8), intent (in) :: l
real(8), intent (in) :: m_m
real(8), intent (in) :: d_m
code = d / sqrt((l * h))
end function
D_m = Math.abs(D);
M_m = Math.abs(M);
assert d < h && h < l && l < M_m && M_m < D_m;
public static double code(double d, double h, double l, double M_m, double D_m) {
return d / Math.sqrt((l * h));
}
D_m = math.fabs(D) M_m = math.fabs(M) [d, h, l, M_m, D_m] = sort([d, h, l, M_m, D_m]) def code(d, h, l, M_m, D_m): return d / math.sqrt((l * h))
D_m = abs(D) M_m = abs(M) d, h, l, M_m, D_m = sort([d, h, l, M_m, D_m]) function code(d, h, l, M_m, D_m) return Float64(d / sqrt(Float64(l * h))) end
D_m = abs(D);
M_m = abs(M);
d, h, l, M_m, D_m = num2cell(sort([d, h, l, M_m, D_m])){:}
function tmp = code(d, h, l, M_m, D_m)
tmp = d / sqrt((l * h));
end
D_m = N[Abs[D], $MachinePrecision] M_m = N[Abs[M], $MachinePrecision] NOTE: d, h, l, M_m, and D_m should be sorted in increasing order before calling this function. code[d_, h_, l_, M$95$m_, D$95$m_] := N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
D_m = \left|D\right|
\\
M_m = \left|M\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\frac{d}{\sqrt{\ell \cdot h}}
\end{array}
Initial program 65.3%
Taylor expanded in d around inf
Applied rewrites33.5%
Taylor expanded in d around -inf
associate-*r*N/A
*-commutativeN/A
mul-1-negN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
remove-double-negN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6427.8
Applied rewrites27.8%
Applied rewrites27.8%
herbie shell --seed 2024303
(FPCore (d h l M D)
:name "Henrywood and Agarwal, Equation (12)"
:precision binary64
(* (* (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)))))