
(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 26 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}
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d (* M_m D_m))))
(if (<= d -7.8e-230)
(*
(/ (pow (- 0.0 d) 0.5) (pow (- 0.0 l) 0.5))
(*
(sqrt (/ d h))
(+ 1.0 (/ (* (* M_m D_m) (* h (/ (/ -0.5 t_0) l))) (* d 4.0)))))
(if (<= d 1.05e-216)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 6.8e-79)
(*
(+ 1.0 (/ (* (/ -0.5 (* l t_0)) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 7.5e+169)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(/
(*
(sqrt d)
(*
(sqrt (/ d l))
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))))
(sqrt h))))))))M_m = fabs(M);
D_m = fabs(D);
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 = d / (M_m * D_m);
double tmp;
if (d <= -7.8e-230) {
tmp = (pow((0.0 - d), 0.5) / pow((0.0 - l), 0.5)) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0))));
} else if (d <= 1.05e-216) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 6.8e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 7.5e+169) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (sqrt(d) * (sqrt((d / l)) * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = d / (m_m * d_m)
if (d <= (-7.8d-230)) then
tmp = (((0.0d0 - d) ** 0.5d0) / ((0.0d0 - l) ** 0.5d0)) * (sqrt((d / h)) * (1.0d0 + (((m_m * d_m) * (h * (((-0.5d0) / t_0) / l))) / (d * 4.0d0))))
else if (d <= 1.05d-216) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 6.8d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * t_0)) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 7.5d+169) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (sqrt(d) * (sqrt((d / l)) * (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)))) / sqrt(h)
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = d / (M_m * D_m);
double tmp;
if (d <= -7.8e-230) {
tmp = (Math.pow((0.0 - d), 0.5) / Math.pow((0.0 - l), 0.5)) * (Math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0))));
} else if (d <= 1.05e-216) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 6.8e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 7.5e+169) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (Math.sqrt(d) * (Math.sqrt((d / l)) * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / Math.sqrt(h);
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = d / (M_m * D_m) tmp = 0 if d <= -7.8e-230: tmp = (math.pow((0.0 - d), 0.5) / math.pow((0.0 - l), 0.5)) * (math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) elif d <= 1.05e-216: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 6.8e-79: tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 7.5e+169: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (math.sqrt(d) * (math.sqrt((d / l)) * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / math.sqrt(h) return tmp
M_m = abs(M) D_m = abs(D) 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(d / Float64(M_m * D_m)) tmp = 0.0 if (d <= -7.8e-230) tmp = Float64(Float64((Float64(0.0 - d) ^ 0.5) / (Float64(0.0 - l) ^ 0.5)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(M_m * D_m) * Float64(h * Float64(Float64(-0.5 / t_0) / l))) / Float64(d * 4.0))))); elseif (d <= 1.05e-216) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 6.8e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * t_0)) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 7.5e+169) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(sqrt(d) * Float64(sqrt(Float64(d / l)) * Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)))) / sqrt(h)); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = d / (M_m * D_m);
tmp = 0.0;
if (d <= -7.8e-230)
tmp = (((0.0 - d) ^ 0.5) / ((0.0 - l) ^ 0.5)) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0))));
elseif (d <= 1.05e-216)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 6.8e-79)
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 7.5e+169)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (sqrt(d) * (sqrt((d / l)) * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -7.8e-230], N[(N[(N[Power[N[(0.0 - d), $MachinePrecision], 0.5], $MachinePrecision] / N[Power[N[(0.0 - l), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * N[(h * N[(N[(-0.5 / t$95$0), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.05e-216], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 6.8e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * t$95$0), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 7.5e+169], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[Sqrt[d], $MachinePrecision] * N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{d}{M\_m \cdot D\_m}\\
\mathbf{if}\;d \leq -7.8 \cdot 10^{-230}:\\
\;\;\;\;\frac{{\left(0 - d\right)}^{0.5}}{{\left(0 - \ell\right)}^{0.5}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{\left(M\_m \cdot D\_m\right) \cdot \left(h \cdot \frac{\frac{-0.5}{t\_0}}{\ell}\right)}{d \cdot 4}\right)\right)\\
\mathbf{elif}\;d \leq 1.05 \cdot 10^{-216}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 6.8 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot t\_0} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 7.5 \cdot 10^{+169}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{d} \cdot \left(\sqrt{\frac{d}{\ell}} \cdot \left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right)\right)}{\sqrt{h}}\\
\end{array}
\end{array}
if d < -7.8000000000000004e-230Initial program 67.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.0%
Applied egg-rr67.0%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.8%
Applied egg-rr67.8%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.9%
Applied egg-rr73.9%
frac-2negN/A
sqrt-divN/A
/-lowering-/.f64N/A
pow1/2N/A
pow-lowering-pow.f64N/A
neg-sub0N/A
--lowering--.f64N/A
pow1/2N/A
pow-lowering-pow.f64N/A
neg-sub0N/A
--lowering--.f6485.2%
Applied egg-rr85.2%
if -7.8000000000000004e-230 < d < 1.0500000000000001e-216Initial program 26.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified13.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr16.3%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.1%
Simplified16.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr10.3%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6475.6%
Simplified75.6%
if 1.0500000000000001e-216 < d < 6.79999999999999951e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 6.79999999999999951e-79 < d < 7.49999999999999992e169Initial program 77.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified77.1%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr78.4%
Applied egg-rr68.5%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.8%
if 7.49999999999999992e169 < d Initial program 83.4%
Applied egg-rr82.6%
Final simplification85.4%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d l))) (t_1 (/ (* M_m D_m) d)))
(if (<= d -4.1e-69)
(*
t_0
(*
(/ (sqrt (- 0.0 d)) (sqrt (- 0.0 h)))
(+ 1.0 (* (* (/ (* M_m D_m) (* d 4.0)) t_1) (* -0.5 (/ h l))))))
(if (<= d -2.8e-232)
(*
(/ (pow (- 0.0 d) 0.5) (sqrt (- 0.0 l)))
(*
(sqrt (/ d h))
(+ 1.0 (/ (* (* M_m D_m) (* t_1 (/ -0.5 (/ l h)))) (* d 4.0)))))
(if (<= d 7.4e-214)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.8e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 1.36e+169)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(/
(*
(sqrt d)
(*
t_0
(-
1.0
(/
(*
(* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d)))
(* 0.5 h))
l))))
(sqrt h)))))))))M_m = fabs(M);
D_m = fabs(D);
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((d / l));
double t_1 = (M_m * D_m) / d;
double tmp;
if (d <= -4.1e-69) {
tmp = t_0 * ((sqrt((0.0 - d)) / sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * t_1) * (-0.5 * (h / l)))));
} else if (d <= -2.8e-232) {
tmp = (pow((0.0 - d), 0.5) / sqrt((0.0 - l))) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (t_1 * (-0.5 / (l / h)))) / (d * 4.0))));
} else if (d <= 7.4e-214) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 1.36e+169) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = sqrt((d / l))
t_1 = (m_m * d_m) / d
if (d <= (-4.1d-69)) then
tmp = t_0 * ((sqrt((0.0d0 - d)) / sqrt((0.0d0 - h))) * (1.0d0 + ((((m_m * d_m) / (d * 4.0d0)) * t_1) * ((-0.5d0) * (h / l)))))
else if (d <= (-2.8d-232)) then
tmp = (((0.0d0 - d) ** 0.5d0) / sqrt((0.0d0 - l))) * (sqrt((d / h)) * (1.0d0 + (((m_m * d_m) * (t_1 * ((-0.5d0) / (l / h)))) / (d * 4.0d0))))
else if (d <= 7.4d-214) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.8d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 1.36d+169) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (sqrt(d) * (t_0 * (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)))) / sqrt(h)
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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((d / l));
double t_1 = (M_m * D_m) / d;
double tmp;
if (d <= -4.1e-69) {
tmp = t_0 * ((Math.sqrt((0.0 - d)) / Math.sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * t_1) * (-0.5 * (h / l)))));
} else if (d <= -2.8e-232) {
tmp = (Math.pow((0.0 - d), 0.5) / Math.sqrt((0.0 - l))) * (Math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (t_1 * (-0.5 / (l / h)))) / (d * 4.0))));
} else if (d <= 7.4e-214) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 1.36e+169) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (Math.sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / Math.sqrt(h);
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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((d / l)) t_1 = (M_m * D_m) / d tmp = 0 if d <= -4.1e-69: tmp = t_0 * ((math.sqrt((0.0 - d)) / math.sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * t_1) * (-0.5 * (h / l))))) elif d <= -2.8e-232: tmp = (math.pow((0.0 - d), 0.5) / math.sqrt((0.0 - l))) * (math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (t_1 * (-0.5 / (l / h)))) / (d * 4.0)))) elif d <= 7.4e-214: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.8e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 1.36e+169: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (math.sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / math.sqrt(h) return tmp
M_m = abs(M) D_m = abs(D) 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(d / l)) t_1 = Float64(Float64(M_m * D_m) / d) tmp = 0.0 if (d <= -4.1e-69) tmp = Float64(t_0 * Float64(Float64(sqrt(Float64(0.0 - d)) / sqrt(Float64(0.0 - h))) * Float64(1.0 + Float64(Float64(Float64(Float64(M_m * D_m) / Float64(d * 4.0)) * t_1) * Float64(-0.5 * Float64(h / l)))))); elseif (d <= -2.8e-232) tmp = Float64(Float64((Float64(0.0 - d) ^ 0.5) / sqrt(Float64(0.0 - l))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(M_m * D_m) * Float64(t_1 * Float64(-0.5 / Float64(l / h)))) / Float64(d * 4.0))))); elseif (d <= 7.4e-214) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.8e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 1.36e+169) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(sqrt(d) * Float64(t_0 * Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)))) / sqrt(h)); end return tmp end
M_m = abs(M);
D_m = abs(D);
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((d / l));
t_1 = (M_m * D_m) / d;
tmp = 0.0;
if (d <= -4.1e-69)
tmp = t_0 * ((sqrt((0.0 - d)) / sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * t_1) * (-0.5 * (h / l)))));
elseif (d <= -2.8e-232)
tmp = (((0.0 - d) ^ 0.5) / sqrt((0.0 - l))) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (t_1 * (-0.5 / (l / h)))) / (d * 4.0))));
elseif (d <= 7.4e-214)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.8e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 1.36e+169)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(d / l), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(M$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision]}, If[LessEqual[d, -4.1e-69], N[(t$95$0 * N[(N[(N[Sqrt[N[(0.0 - d), $MachinePrecision]], $MachinePrecision] / N[Sqrt[N[(0.0 - h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * N[(-0.5 * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, -2.8e-232], N[(N[(N[Power[N[(0.0 - d), $MachinePrecision], 0.5], $MachinePrecision] / N[Sqrt[N[(0.0 - l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * N[(t$95$1 * N[(-0.5 / N[(l / h), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 7.4e-214], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.8e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.36e+169], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[Sqrt[d], $MachinePrecision] * N[(t$95$0 * N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{d}{\ell}}\\
t_1 := \frac{M\_m \cdot D\_m}{d}\\
\mathbf{if}\;d \leq -4.1 \cdot 10^{-69}:\\
\;\;\;\;t\_0 \cdot \left(\frac{\sqrt{0 - d}}{\sqrt{0 - h}} \cdot \left(1 + \left(\frac{M\_m \cdot D\_m}{d \cdot 4} \cdot t\_1\right) \cdot \left(-0.5 \cdot \frac{h}{\ell}\right)\right)\right)\\
\mathbf{elif}\;d \leq -2.8 \cdot 10^{-232}:\\
\;\;\;\;\frac{{\left(0 - d\right)}^{0.5}}{\sqrt{0 - \ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{\left(M\_m \cdot D\_m\right) \cdot \left(t\_1 \cdot \frac{-0.5}{\frac{\ell}{h}}\right)}{d \cdot 4}\right)\right)\\
\mathbf{elif}\;d \leq 7.4 \cdot 10^{-214}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.8 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 1.36 \cdot 10^{+169}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{d} \cdot \left(t\_0 \cdot \left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right)\right)}{\sqrt{h}}\\
\end{array}
\end{array}
if d < -4.0999999999999999e-69Initial program 74.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified65.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6474.2%
Applied egg-rr74.2%
div-invN/A
frac-2negN/A
metadata-evalN/A
associate-*r/N/A
sqrt-divN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
neg-sub0N/A
--lowering--.f6484.9%
Applied egg-rr84.9%
if -4.0999999999999999e-69 < d < -2.79999999999999993e-232Initial program 51.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified40.1%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6451.6%
Applied egg-rr51.6%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6454.2%
Applied egg-rr54.2%
frac-2negN/A
sqrt-divN/A
pow1/2N/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
neg-sub0N/A
--lowering--.f64N/A
sqrt-lowering-sqrt.f64N/A
neg-sub0N/A
--lowering--.f6471.7%
Applied egg-rr71.7%
if -2.79999999999999993e-232 < d < 7.4000000000000004e-214Initial program 26.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified13.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr16.3%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.1%
Simplified16.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr10.3%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6475.6%
Simplified75.6%
if 7.4000000000000004e-214 < d < 5.8000000000000001e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.8000000000000001e-79 < d < 1.36000000000000001e169Initial program 77.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified77.1%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr78.4%
Applied egg-rr68.5%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.8%
if 1.36000000000000001e169 < d Initial program 83.4%
Applied egg-rr82.6%
Final simplification83.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d l))))
(if (<= d -2.1e-215)
(*
t_0
(*
(/ (sqrt (- 0.0 d)) (sqrt (- 0.0 h)))
(+
1.0
(* (* (/ (* M_m D_m) (* d 4.0)) (/ (* M_m D_m) d)) (* -0.5 (/ h l))))))
(if (<= d 2.5e-213)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.2e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 1.7e+169)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(/
(*
(sqrt d)
(*
t_0
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))))
(sqrt h))))))))M_m = fabs(M);
D_m = fabs(D);
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((d / l));
double tmp;
if (d <= -2.1e-215) {
tmp = t_0 * ((sqrt((0.0 - d)) / sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
} else if (d <= 2.5e-213) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.2e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 1.7e+169) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt((d / l))
if (d <= (-2.1d-215)) then
tmp = t_0 * ((sqrt((0.0d0 - d)) / sqrt((0.0d0 - h))) * (1.0d0 + ((((m_m * d_m) / (d * 4.0d0)) * ((m_m * d_m) / d)) * ((-0.5d0) * (h / l)))))
else if (d <= 2.5d-213) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.2d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 1.7d+169) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (sqrt(d) * (t_0 * (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)))) / sqrt(h)
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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((d / l));
double tmp;
if (d <= -2.1e-215) {
tmp = t_0 * ((Math.sqrt((0.0 - d)) / Math.sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
} else if (d <= 2.5e-213) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.2e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 1.7e+169) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (Math.sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / Math.sqrt(h);
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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((d / l)) tmp = 0 if d <= -2.1e-215: tmp = t_0 * ((math.sqrt((0.0 - d)) / math.sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l))))) elif d <= 2.5e-213: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.2e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 1.7e+169: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (math.sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / math.sqrt(h) return tmp
M_m = abs(M) D_m = abs(D) 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(d / l)) tmp = 0.0 if (d <= -2.1e-215) tmp = Float64(t_0 * Float64(Float64(sqrt(Float64(0.0 - d)) / sqrt(Float64(0.0 - h))) * Float64(1.0 + Float64(Float64(Float64(Float64(M_m * D_m) / Float64(d * 4.0)) * Float64(Float64(M_m * D_m) / d)) * Float64(-0.5 * Float64(h / l)))))); elseif (d <= 2.5e-213) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.2e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 1.7e+169) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(sqrt(d) * Float64(t_0 * Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)))) / sqrt(h)); end return tmp end
M_m = abs(M);
D_m = abs(D);
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((d / l));
tmp = 0.0;
if (d <= -2.1e-215)
tmp = t_0 * ((sqrt((0.0 - d)) / sqrt((0.0 - h))) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
elseif (d <= 2.5e-213)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.2e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 1.7e+169)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (sqrt(d) * (t_0 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(d / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[d, -2.1e-215], N[(t$95$0 * N[(N[(N[Sqrt[N[(0.0 - d), $MachinePrecision]], $MachinePrecision] / N[Sqrt[N[(0.0 - h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision] * N[(N[(M$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision]), $MachinePrecision] * N[(-0.5 * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 2.5e-213], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.2e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.7e+169], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[Sqrt[d], $MachinePrecision] * N[(t$95$0 * N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{d}{\ell}}\\
\mathbf{if}\;d \leq -2.1 \cdot 10^{-215}:\\
\;\;\;\;t\_0 \cdot \left(\frac{\sqrt{0 - d}}{\sqrt{0 - h}} \cdot \left(1 + \left(\frac{M\_m \cdot D\_m}{d \cdot 4} \cdot \frac{M\_m \cdot D\_m}{d}\right) \cdot \left(-0.5 \cdot \frac{h}{\ell}\right)\right)\right)\\
\mathbf{elif}\;d \leq 2.5 \cdot 10^{-213}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.2 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 1.7 \cdot 10^{+169}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{d} \cdot \left(t\_0 \cdot \left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right)\right)}{\sqrt{h}}\\
\end{array}
\end{array}
if d < -2.1e-215Initial program 68.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified58.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6468.1%
Applied egg-rr68.1%
div-invN/A
frac-2negN/A
metadata-evalN/A
associate-*r/N/A
sqrt-divN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
neg-sub0N/A
--lowering--.f6477.8%
Applied egg-rr77.8%
if -2.1e-215 < d < 2.49999999999999989e-213Initial program 26.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified12.2%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr14.9%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.8%
Simplified16.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr11.6%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6471.3%
Simplified71.3%
if 2.49999999999999989e-213 < d < 5.19999999999999987e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.19999999999999987e-79 < d < 1.70000000000000014e169Initial program 77.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified77.1%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr78.4%
Applied egg-rr68.5%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.8%
if 1.70000000000000014e169 < d Initial program 83.4%
Applied egg-rr82.6%
Final simplification81.4%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d (* M_m D_m))) (t_1 (sqrt (/ d l))))
(if (<= d -1.5e-214)
(*
(*
(sqrt (/ d h))
(+ 1.0 (/ (* (* M_m D_m) (* h (/ (/ -0.5 t_0) l))) (* d 4.0))))
t_1)
(if (<= d 3.6e-218)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 6.8e-79)
(*
(+ 1.0 (/ (* (/ -0.5 (* l t_0)) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 1.4e+169)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(/
(*
(sqrt d)
(*
t_1
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))))
(sqrt h))))))))M_m = fabs(M);
D_m = fabs(D);
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 = d / (M_m * D_m);
double t_1 = sqrt((d / l));
double tmp;
if (d <= -1.5e-214) {
tmp = (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * t_1;
} else if (d <= 3.6e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 6.8e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 1.4e+169) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (sqrt(d) * (t_1 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = d / (m_m * d_m)
t_1 = sqrt((d / l))
if (d <= (-1.5d-214)) then
tmp = (sqrt((d / h)) * (1.0d0 + (((m_m * d_m) * (h * (((-0.5d0) / t_0) / l))) / (d * 4.0d0)))) * t_1
else if (d <= 3.6d-218) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 6.8d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * t_0)) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 1.4d+169) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (sqrt(d) * (t_1 * (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)))) / sqrt(h)
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = d / (M_m * D_m);
double t_1 = Math.sqrt((d / l));
double tmp;
if (d <= -1.5e-214) {
tmp = (Math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * t_1;
} else if (d <= 3.6e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 6.8e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 1.4e+169) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (Math.sqrt(d) * (t_1 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / Math.sqrt(h);
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = d / (M_m * D_m) t_1 = math.sqrt((d / l)) tmp = 0 if d <= -1.5e-214: tmp = (math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * t_1 elif d <= 3.6e-218: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 6.8e-79: tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 1.4e+169: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (math.sqrt(d) * (t_1 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / math.sqrt(h) return tmp
M_m = abs(M) D_m = abs(D) 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(d / Float64(M_m * D_m)) t_1 = sqrt(Float64(d / l)) tmp = 0.0 if (d <= -1.5e-214) tmp = Float64(Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(M_m * D_m) * Float64(h * Float64(Float64(-0.5 / t_0) / l))) / Float64(d * 4.0)))) * t_1); elseif (d <= 3.6e-218) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 6.8e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * t_0)) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 1.4e+169) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(sqrt(d) * Float64(t_1 * Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)))) / sqrt(h)); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = d / (M_m * D_m);
t_1 = sqrt((d / l));
tmp = 0.0;
if (d <= -1.5e-214)
tmp = (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * t_1;
elseif (d <= 3.6e-218)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 6.8e-79)
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 1.4e+169)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (sqrt(d) * (t_1 * (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)))) / sqrt(h);
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[d, -1.5e-214], N[(N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * N[(h * N[(N[(-0.5 / t$95$0), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision], If[LessEqual[d, 3.6e-218], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 6.8e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * t$95$0), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.4e+169], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[Sqrt[d], $MachinePrecision] * N[(t$95$1 * N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{d}{M\_m \cdot D\_m}\\
t_1 := \sqrt{\frac{d}{\ell}}\\
\mathbf{if}\;d \leq -1.5 \cdot 10^{-214}:\\
\;\;\;\;\left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{\left(M\_m \cdot D\_m\right) \cdot \left(h \cdot \frac{\frac{-0.5}{t\_0}}{\ell}\right)}{d \cdot 4}\right)\right) \cdot t\_1\\
\mathbf{elif}\;d \leq 3.6 \cdot 10^{-218}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 6.8 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot t\_0} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 1.4 \cdot 10^{+169}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{d} \cdot \left(t\_1 \cdot \left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right)\right)}{\sqrt{h}}\\
\end{array}
\end{array}
if d < -1.49999999999999997e-214Initial program 68.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified58.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6468.1%
Applied egg-rr68.1%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6468.9%
Applied egg-rr68.9%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6475.2%
Applied egg-rr75.2%
if -1.49999999999999997e-214 < d < 3.60000000000000011e-218Initial program 26.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified12.2%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr14.9%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.8%
Simplified16.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr11.6%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6471.3%
Simplified71.3%
if 3.60000000000000011e-218 < d < 6.79999999999999951e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 6.79999999999999951e-79 < d < 1.4000000000000001e169Initial program 77.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified77.1%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr78.4%
Applied egg-rr68.5%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.8%
if 1.4000000000000001e169 < d Initial program 83.4%
Applied egg-rr82.6%
Final simplification80.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d (* M_m D_m)))
(t_1
(*
(*
(sqrt (/ d h))
(+ 1.0 (/ (* (* M_m D_m) (* h (/ (/ -0.5 t_0) l))) (* d 4.0))))
(sqrt (/ d l)))))
(if (<= d -4e-212)
t_1
(if (<= d 2.5e-211)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.2e-79)
(*
(+ 1.0 (/ (* (/ -0.5 (* l t_0)) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 3.8e+157)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
t_1))))))M_m = fabs(M);
D_m = fabs(D);
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 = d / (M_m * D_m);
double t_1 = (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * sqrt((d / l));
double tmp;
if (d <= -4e-212) {
tmp = t_1;
} else if (d <= 2.5e-211) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.2e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 3.8e+157) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = t_1;
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = d / (m_m * d_m)
t_1 = (sqrt((d / h)) * (1.0d0 + (((m_m * d_m) * (h * (((-0.5d0) / t_0) / l))) / (d * 4.0d0)))) * sqrt((d / l))
if (d <= (-4d-212)) then
tmp = t_1
else if (d <= 2.5d-211) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.2d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * t_0)) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 3.8d+157) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = t_1
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = d / (M_m * D_m);
double t_1 = (Math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * Math.sqrt((d / l));
double tmp;
if (d <= -4e-212) {
tmp = t_1;
} else if (d <= 2.5e-211) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.2e-79) {
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 3.8e+157) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = t_1;
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = d / (M_m * D_m) t_1 = (math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * math.sqrt((d / l)) tmp = 0 if d <= -4e-212: tmp = t_1 elif d <= 2.5e-211: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.2e-79: tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 3.8e+157: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = t_1 return tmp
M_m = abs(M) D_m = abs(D) 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(d / Float64(M_m * D_m)) t_1 = Float64(Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(M_m * D_m) * Float64(h * Float64(Float64(-0.5 / t_0) / l))) / Float64(d * 4.0)))) * sqrt(Float64(d / l))) tmp = 0.0 if (d <= -4e-212) tmp = t_1; elseif (d <= 2.5e-211) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.2e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * t_0)) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 3.8e+157) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = t_1; end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = d / (M_m * D_m);
t_1 = (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (h * ((-0.5 / t_0) / l))) / (d * 4.0)))) * sqrt((d / l));
tmp = 0.0;
if (d <= -4e-212)
tmp = t_1;
elseif (d <= 2.5e-211)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.2e-79)
tmp = (1.0 + (((-0.5 / (l * t_0)) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 3.8e+157)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = t_1;
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * N[(h * N[(N[(-0.5 / t$95$0), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -4e-212], t$95$1, If[LessEqual[d, 2.5e-211], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.2e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * t$95$0), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 3.8e+157], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{d}{M\_m \cdot D\_m}\\
t_1 := \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{\left(M\_m \cdot D\_m\right) \cdot \left(h \cdot \frac{\frac{-0.5}{t\_0}}{\ell}\right)}{d \cdot 4}\right)\right) \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{if}\;d \leq -4 \cdot 10^{-212}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;d \leq 2.5 \cdot 10^{-211}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.2 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot t\_0} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 3.8 \cdot 10^{+157}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if d < -3.99999999999999982e-212 or 3.8000000000000001e157 < d Initial program 72.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6472.5%
Applied egg-rr72.5%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.1%
Applied egg-rr73.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.8%
Applied egg-rr77.8%
if -3.99999999999999982e-212 < d < 2.5000000000000001e-211Initial program 26.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified12.2%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr14.9%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.8%
Simplified16.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr11.6%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6471.3%
Simplified71.3%
if 2.5000000000000001e-211 < d < 5.19999999999999987e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.19999999999999987e-79 < d < 3.8000000000000001e157Initial program 75.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.4%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr76.7%
Applied egg-rr69.8%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.1%
Final simplification80.4%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d l))
(*
(sqrt (/ d h))
(+
1.0
(/
(* (* M_m D_m) (* (/ (* M_m D_m) d) (/ -0.5 (/ l h))))
(* d 4.0)))))))
(if (<= d -1.85e-230)
t_0
(if (<= d 4e-217)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.5e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 3.3e+158)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
t_0))))))M_m = fabs(M);
D_m = fabs(D);
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((d / l)) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (((M_m * D_m) / d) * (-0.5 / (l / h)))) / (d * 4.0))));
double tmp;
if (d <= -1.85e-230) {
tmp = t_0;
} else if (d <= 4e-217) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 3.3e+158) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = t_0;
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt((d / l)) * (sqrt((d / h)) * (1.0d0 + (((m_m * d_m) * (((m_m * d_m) / d) * ((-0.5d0) / (l / h)))) / (d * 4.0d0))))
if (d <= (-1.85d-230)) then
tmp = t_0
else if (d <= 4d-217) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.5d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 3.3d+158) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = t_0
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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((d / l)) * (Math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (((M_m * D_m) / d) * (-0.5 / (l / h)))) / (d * 4.0))));
double tmp;
if (d <= -1.85e-230) {
tmp = t_0;
} else if (d <= 4e-217) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 3.3e+158) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = t_0;
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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((d / l)) * (math.sqrt((d / h)) * (1.0 + (((M_m * D_m) * (((M_m * D_m) / d) * (-0.5 / (l / h)))) / (d * 4.0)))) tmp = 0 if d <= -1.85e-230: tmp = t_0 elif d <= 4e-217: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.5e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 3.3e+158: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = t_0 return tmp
M_m = abs(M) D_m = abs(D) 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(sqrt(Float64(d / l)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(M_m * D_m) * Float64(Float64(Float64(M_m * D_m) / d) * Float64(-0.5 / Float64(l / h)))) / Float64(d * 4.0))))) tmp = 0.0 if (d <= -1.85e-230) tmp = t_0; elseif (d <= 4e-217) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.5e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 3.3e+158) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = t_0; end return tmp end
M_m = abs(M);
D_m = abs(D);
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((d / l)) * (sqrt((d / h)) * (1.0 + (((M_m * D_m) * (((M_m * D_m) / d) * (-0.5 / (l / h)))) / (d * 4.0))));
tmp = 0.0;
if (d <= -1.85e-230)
tmp = t_0;
elseif (d <= 4e-217)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.5e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 3.3e+158)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = t_0;
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] * N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision] * N[(-0.5 / N[(l / h), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -1.85e-230], t$95$0, If[LessEqual[d, 4e-217], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.5e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 3.3e+158], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{d}{\ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{\left(M\_m \cdot D\_m\right) \cdot \left(\frac{M\_m \cdot D\_m}{d} \cdot \frac{-0.5}{\frac{\ell}{h}}\right)}{d \cdot 4}\right)\right)\\
\mathbf{if}\;d \leq -1.85 \cdot 10^{-230}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d \leq 4 \cdot 10^{-217}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.5 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 3.3 \cdot 10^{+158}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d < -1.84999999999999991e-230 or 3.30000000000000017e158 < d Initial program 71.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified55.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6471.5%
Applied egg-rr71.5%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6472.2%
Applied egg-rr72.2%
if -1.84999999999999991e-230 < d < 4.00000000000000033e-217Initial program 26.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified13.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr16.3%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.1%
Simplified16.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr10.3%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6475.6%
Simplified75.6%
if 4.00000000000000033e-217 < d < 5.4999999999999997e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.4999999999999997e-79 < d < 3.30000000000000017e158Initial program 75.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.4%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr76.7%
Applied egg-rr69.8%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.1%
Final simplification77.6%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ d l))
(*
(sqrt (/ d h))
(+
1.0
(*
(* (/ (* M_m D_m) (* d 4.0)) (/ (* M_m D_m) d))
(* -0.5 (/ h l))))))))
(if (<= d -1.2e-213)
t_0
(if (<= d 3.1e-218)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.8e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 1.9e+158)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
t_0))))))M_m = fabs(M);
D_m = fabs(D);
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((d / l)) * (sqrt((d / h)) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
double tmp;
if (d <= -1.2e-213) {
tmp = t_0;
} else if (d <= 3.1e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 1.9e+158) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = t_0;
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt((d / l)) * (sqrt((d / h)) * (1.0d0 + ((((m_m * d_m) / (d * 4.0d0)) * ((m_m * d_m) / d)) * ((-0.5d0) * (h / l)))))
if (d <= (-1.2d-213)) then
tmp = t_0
else if (d <= 3.1d-218) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.8d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 1.9d+158) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = t_0
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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((d / l)) * (Math.sqrt((d / h)) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
double tmp;
if (d <= -1.2e-213) {
tmp = t_0;
} else if (d <= 3.1e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 1.9e+158) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = t_0;
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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((d / l)) * (math.sqrt((d / h)) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l))))) tmp = 0 if d <= -1.2e-213: tmp = t_0 elif d <= 3.1e-218: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.8e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 1.9e+158: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = t_0 return tmp
M_m = abs(M) D_m = abs(D) 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(sqrt(Float64(d / l)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(Float64(Float64(M_m * D_m) / Float64(d * 4.0)) * Float64(Float64(M_m * D_m) / d)) * Float64(-0.5 * Float64(h / l)))))) tmp = 0.0 if (d <= -1.2e-213) tmp = t_0; elseif (d <= 3.1e-218) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.8e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 1.9e+158) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = t_0; end return tmp end
M_m = abs(M);
D_m = abs(D);
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((d / l)) * (sqrt((d / h)) * (1.0 + ((((M_m * D_m) / (d * 4.0)) * ((M_m * D_m) / d)) * (-0.5 * (h / l)))));
tmp = 0.0;
if (d <= -1.2e-213)
tmp = t_0;
elseif (d <= 3.1e-218)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.8e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 1.9e+158)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = t_0;
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(N[(N[(M$95$m * D$95$m), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision] * N[(N[(M$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision]), $MachinePrecision] * N[(-0.5 * N[(h / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -1.2e-213], t$95$0, If[LessEqual[d, 3.1e-218], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.8e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.9e+158], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{d}{\ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \left(\frac{M\_m \cdot D\_m}{d \cdot 4} \cdot \frac{M\_m \cdot D\_m}{d}\right) \cdot \left(-0.5 \cdot \frac{h}{\ell}\right)\right)\right)\\
\mathbf{if}\;d \leq -1.2 \cdot 10^{-213}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d \leq 3.1 \cdot 10^{-218}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.8 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 1.9 \cdot 10^{+158}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d < -1.19999999999999998e-213 or 1.8999999999999999e158 < d Initial program 72.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6472.5%
Applied egg-rr72.5%
if -1.19999999999999998e-213 < d < 3.09999999999999997e-218Initial program 26.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified12.2%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr14.9%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6416.8%
Simplified16.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr11.6%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6471.3%
Simplified71.3%
if 3.09999999999999997e-218 < d < 5.8000000000000001e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.8000000000000001e-79 < d < 1.8999999999999999e158Initial program 75.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.4%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr76.7%
Applied egg-rr69.8%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.1%
Final simplification77.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (* M_m D_m))))
(if (<= d -2.5e-126)
(*
(sqrt (/ d l))
(*
(sqrt (/ d h))
(+ 1.0 (/ (* h (/ -0.125 (/ (/ (* d d) D_m) t_0))) l))))
(if (<= d 3.5e-218)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.5e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 7.5e+109)
(*
(/ d (sqrt h))
(/
(+ 1.0 (/ (/ (* h -0.125) (/ (* d d) (* D_m t_0))) l))
(sqrt l)))
(*
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))
(/ d (pow (* l h) 0.5)))))))))M_m = fabs(M);
D_m = fabs(D);
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 * (M_m * D_m);
double tmp;
if (d <= -2.5e-126) {
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + ((h * (-0.125 / (((d * d) / D_m) / t_0))) / l)));
} else if (d <= 3.5e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 7.5e+109) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * t_0))) / l)) / sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / pow((l * h), 0.5));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = m_m * (m_m * d_m)
if (d <= (-2.5d-126)) then
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0d0 + ((h * ((-0.125d0) / (((d * d) / d_m) / t_0))) / l)))
else if (d <= 3.5d-218) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.5d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 7.5d+109) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * t_0))) / l)) / sqrt(l))
else
tmp = (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)) * (d / ((l * h) ** 0.5d0))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = M_m * (M_m * D_m);
double tmp;
if (d <= -2.5e-126) {
tmp = Math.sqrt((d / l)) * (Math.sqrt((d / h)) * (1.0 + ((h * (-0.125 / (((d * d) / D_m) / t_0))) / l)));
} else if (d <= 3.5e-218) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 7.5e+109) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * t_0))) / l)) / Math.sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / Math.pow((l * h), 0.5));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = M_m * (M_m * D_m) tmp = 0 if d <= -2.5e-126: tmp = math.sqrt((d / l)) * (math.sqrt((d / h)) * (1.0 + ((h * (-0.125 / (((d * d) / D_m) / t_0))) / l))) elif d <= 3.5e-218: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.5e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 7.5e+109: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * t_0))) / l)) / math.sqrt(l)) else: tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / math.pow((l * h), 0.5)) return tmp
M_m = abs(M) D_m = abs(D) 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(M_m * Float64(M_m * D_m)) tmp = 0.0 if (d <= -2.5e-126) tmp = Float64(sqrt(Float64(d / l)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(h * Float64(-0.125 / Float64(Float64(Float64(d * d) / D_m) / t_0))) / l)))); elseif (d <= 3.5e-218) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.5e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 7.5e+109) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * t_0))) / l)) / sqrt(l))); else tmp = Float64(Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)) * Float64(d / (Float64(l * h) ^ 0.5))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = M_m * (M_m * D_m);
tmp = 0.0;
if (d <= -2.5e-126)
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + ((h * (-0.125 / (((d * d) / D_m) / t_0))) / l)));
elseif (d <= 3.5e-218)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.5e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 7.5e+109)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * t_0))) / l)) / sqrt(l));
else
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / ((l * h) ^ 0.5));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -2.5e-126], N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(h * N[(-0.125 / N[(N[(N[(d * d), $MachinePrecision] / D$95$m), $MachinePrecision] / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 3.5e-218], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.5e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 7.5e+109], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] * N[(d / N[Power[N[(l * h), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := M\_m \cdot \left(M\_m \cdot D\_m\right)\\
\mathbf{if}\;d \leq -2.5 \cdot 10^{-126}:\\
\;\;\;\;\sqrt{\frac{d}{\ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h \cdot \frac{-0.125}{\frac{\frac{d \cdot d}{D\_m}}{t\_0}}}{\ell}\right)\right)\\
\mathbf{elif}\;d \leq 3.5 \cdot 10^{-218}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.5 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 7.5 \cdot 10^{+109}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot t\_0}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right) \cdot \frac{d}{{\left(\ell \cdot h\right)}^{0.5}}\\
\end{array}
\end{array}
if d < -2.50000000000000003e-126Initial program 71.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified64.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6471.4%
Applied egg-rr71.4%
Applied egg-rr67.2%
if -2.50000000000000003e-126 < d < 3.5e-218Initial program 34.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified18.6%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.9%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6421.3%
Simplified21.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr8.7%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6463.1%
Simplified63.1%
if 3.5e-218 < d < 5.4999999999999997e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.4999999999999997e-79 < d < 7.50000000000000018e109Initial program 75.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.7%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr75.3%
Applied egg-rr78.2%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.0%
if 7.50000000000000018e109 < d Initial program 82.7%
Applied egg-rr78.1%
Final simplification73.9%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 -2.6e-58)
(*
(sqrt (/ d l))
(*
(sqrt (/ d h))
(+ 1.0 (* (* -0.125 (* M_m M_m)) (/ (* h (/ (/ (* D_m D_m) d) d)) l)))))
(if (<= d 6.6e-215)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.8e-79)
(*
(+
1.0
(/ (* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 5e+111)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(*
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))
(/ d (pow (* l h) 0.5))))))))M_m = fabs(M);
D_m = fabs(D);
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 <= -2.6e-58) {
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + ((-0.125 * (M_m * M_m)) * ((h * (((D_m * D_m) / d) / d)) / l))));
} else if (d <= 6.6e-215) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 5e+111) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / pow((l * h), 0.5));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 <= (-2.6d-58)) then
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0d0 + (((-0.125d0) * (m_m * m_m)) * ((h * (((d_m * d_m) / d) / d)) / l))))
else if (d <= 6.6d-215) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.8d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 5d+111) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)) * (d / ((l * h) ** 0.5d0))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 <= -2.6e-58) {
tmp = Math.sqrt((d / l)) * (Math.sqrt((d / h)) * (1.0 + ((-0.125 * (M_m * M_m)) * ((h * (((D_m * D_m) / d) / d)) / l))));
} else if (d <= 6.6e-215) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.8e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 5e+111) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / Math.pow((l * h), 0.5));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 <= -2.6e-58: tmp = math.sqrt((d / l)) * (math.sqrt((d / h)) * (1.0 + ((-0.125 * (M_m * M_m)) * ((h * (((D_m * D_m) / d) / d)) / l)))) elif d <= 6.6e-215: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.8e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 5e+111: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / math.pow((l * h), 0.5)) return tmp
M_m = abs(M) D_m = abs(D) 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 <= -2.6e-58) tmp = Float64(sqrt(Float64(d / l)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(Float64(-0.125 * Float64(M_m * M_m)) * Float64(Float64(h * Float64(Float64(Float64(D_m * D_m) / d) / d)) / l))))); elseif (d <= 6.6e-215) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.8e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 5e+111) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)) * Float64(d / (Float64(l * h) ^ 0.5))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 <= -2.6e-58)
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + ((-0.125 * (M_m * M_m)) * ((h * (((D_m * D_m) / d) / d)) / l))));
elseif (d <= 6.6e-215)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.8e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 5e+111)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / ((l * h) ^ 0.5));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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, -2.6e-58], N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(N[(-0.125 * N[(M$95$m * M$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(h * N[(N[(N[(D$95$m * D$95$m), $MachinePrecision] / d), $MachinePrecision] / d), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 6.6e-215], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.8e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5e+111], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] * N[(d / N[Power[N[(l * h), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;d \leq -2.6 \cdot 10^{-58}:\\
\;\;\;\;\sqrt{\frac{d}{\ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \left(-0.125 \cdot \left(M\_m \cdot M\_m\right)\right) \cdot \frac{h \cdot \frac{\frac{D\_m \cdot D\_m}{d}}{d}}{\ell}\right)\right)\\
\mathbf{elif}\;d \leq 6.6 \cdot 10^{-215}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.8 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 5 \cdot 10^{+111}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right) \cdot \frac{d}{{\left(\ell \cdot h\right)}^{0.5}}\\
\end{array}
\end{array}
if d < -2.60000000000000007e-58Initial program 74.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified64.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6474.2%
Applied egg-rr74.2%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6474.1%
Applied egg-rr74.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6480.9%
Applied egg-rr80.9%
Taylor expanded in M around inf
+-commutativeN/A
distribute-lft-inN/A
rgt-mult-inverseN/A
+-lowering-+.f64N/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
Simplified64.8%
if -2.60000000000000007e-58 < d < 6.5999999999999996e-215Initial program 41.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified30.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr7.2%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6428.1%
Simplified28.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr6.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6461.3%
Simplified61.3%
if 6.5999999999999996e-215 < d < 5.8000000000000001e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.8000000000000001e-79 < d < 4.9999999999999997e111Initial program 75.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.7%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr75.3%
Applied egg-rr78.2%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.0%
if 4.9999999999999997e111 < d Initial program 82.7%
Applied egg-rr78.1%
Final simplification72.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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_m (* M_m D_m)))))
(if (<= d -8e-61)
(*
(sqrt (/ d l))
(* (sqrt (/ d h)) (+ 1.0 (* t_0 (* -0.125 (/ (/ h l) (* d d)))))))
(if (<= d 4.4e-218)
(/ -1.0 (* (/ d t_0) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= d 5.5e-79)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(if (<= d 5e+111)
(*
(/ d (sqrt h))
(/
(+
1.0
(/ (/ (* h -0.125) (/ (* d d) (* D_m (* M_m (* M_m D_m))))) l))
(sqrt l)))
(*
(-
1.0
(/
(* (* (* (* M_m M_m) 0.25) (* (/ D_m d) (/ D_m d))) (* 0.5 h))
l))
(/ d (pow (* l h) 0.5)))))))))M_m = fabs(M);
D_m = fabs(D);
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_m * (M_m * D_m));
double tmp;
if (d <= -8e-61) {
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + (t_0 * (-0.125 * ((h / l) / (d * d))))));
} else if (d <= 4.4e-218) {
tmp = -1.0 / ((d / t_0) * (8.0 * (l * sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else if (d <= 5e+111) {
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / pow((l * h), 0.5));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = m_m * (d_m * (m_m * d_m))
if (d <= (-8d-61)) then
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0d0 + (t_0 * ((-0.125d0) * ((h / l) / (d * d))))))
else if (d <= 4.4d-218) then
tmp = (-1.0d0) / ((d / t_0) * (8.0d0 * (l * sqrt((l / h)))))
else if (d <= 5.5d-79) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else if (d <= 5d+111) then
tmp = (d / sqrt(h)) * ((1.0d0 + (((h * (-0.125d0)) / ((d * d) / (d_m * (m_m * (m_m * d_m))))) / l)) / sqrt(l))
else
tmp = (1.0d0 - (((((m_m * m_m) * 0.25d0) * ((d_m / d) * (d_m / d))) * (0.5d0 * h)) / l)) * (d / ((l * h) ** 0.5d0))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = M_m * (D_m * (M_m * D_m));
double tmp;
if (d <= -8e-61) {
tmp = Math.sqrt((d / l)) * (Math.sqrt((d / h)) * (1.0 + (t_0 * (-0.125 * ((h / l) / (d * d))))));
} else if (d <= 4.4e-218) {
tmp = -1.0 / ((d / t_0) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (d <= 5.5e-79) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else if (d <= 5e+111) {
tmp = (d / Math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / Math.sqrt(l));
} else {
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / Math.pow((l * h), 0.5));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = M_m * (D_m * (M_m * D_m)) tmp = 0 if d <= -8e-61: tmp = math.sqrt((d / l)) * (math.sqrt((d / h)) * (1.0 + (t_0 * (-0.125 * ((h / l) / (d * d)))))) elif d <= 4.4e-218: tmp = -1.0 / ((d / t_0) * (8.0 * (l * math.sqrt((l / h))))) elif d <= 5.5e-79: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) elif d <= 5e+111: tmp = (d / math.sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / math.sqrt(l)) else: tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / math.pow((l * h), 0.5)) return tmp
M_m = abs(M) D_m = abs(D) 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(M_m * Float64(D_m * Float64(M_m * D_m))) tmp = 0.0 if (d <= -8e-61) tmp = Float64(sqrt(Float64(d / l)) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(t_0 * Float64(-0.125 * Float64(Float64(h / l) / Float64(d * d))))))); elseif (d <= 4.4e-218) tmp = Float64(-1.0 / Float64(Float64(d / t_0) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (d <= 5.5e-79) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); elseif (d <= 5e+111) tmp = Float64(Float64(d / sqrt(h)) * Float64(Float64(1.0 + Float64(Float64(Float64(h * -0.125) / Float64(Float64(d * d) / Float64(D_m * Float64(M_m * Float64(M_m * D_m))))) / l)) / sqrt(l))); else tmp = Float64(Float64(1.0 - Float64(Float64(Float64(Float64(Float64(M_m * M_m) * 0.25) * Float64(Float64(D_m / d) * Float64(D_m / d))) * Float64(0.5 * h)) / l)) * Float64(d / (Float64(l * h) ^ 0.5))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = M_m * (D_m * (M_m * D_m));
tmp = 0.0;
if (d <= -8e-61)
tmp = sqrt((d / l)) * (sqrt((d / h)) * (1.0 + (t_0 * (-0.125 * ((h / l) / (d * d))))));
elseif (d <= 4.4e-218)
tmp = -1.0 / ((d / t_0) * (8.0 * (l * sqrt((l / h)))));
elseif (d <= 5.5e-79)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
elseif (d <= 5e+111)
tmp = (d / sqrt(h)) * ((1.0 + (((h * -0.125) / ((d * d) / (D_m * (M_m * (M_m * D_m))))) / l)) / sqrt(l));
else
tmp = (1.0 - (((((M_m * M_m) * 0.25) * ((D_m / d) * (D_m / d))) * (0.5 * h)) / l)) * (d / ((l * h) ^ 0.5));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -8e-61], N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(t$95$0 * N[(-0.125 * N[(N[(h / l), $MachinePrecision] / N[(d * d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 4.4e-218], N[(-1.0 / N[(N[(d / t$95$0), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.5e-79], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5e+111], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[(N[(N[(h * -0.125), $MachinePrecision] / N[(N[(d * d), $MachinePrecision] / N[(D$95$m * N[(M$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 - N[(N[(N[(N[(N[(M$95$m * M$95$m), $MachinePrecision] * 0.25), $MachinePrecision] * N[(N[(D$95$m / d), $MachinePrecision] * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.5 * h), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] * N[(d / N[Power[N[(l * h), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)\\
\mathbf{if}\;d \leq -8 \cdot 10^{-61}:\\
\;\;\;\;\sqrt{\frac{d}{\ell}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + t\_0 \cdot \left(-0.125 \cdot \frac{\frac{h}{\ell}}{d \cdot d}\right)\right)\right)\\
\mathbf{elif}\;d \leq 4.4 \cdot 10^{-218}:\\
\;\;\;\;\frac{-1}{\frac{d}{t\_0} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;d \leq 5.5 \cdot 10^{-79}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{elif}\;d \leq 5 \cdot 10^{+111}:\\
\;\;\;\;\frac{d}{\sqrt{h}} \cdot \frac{1 + \frac{\frac{h \cdot -0.125}{\frac{d \cdot d}{D\_m \cdot \left(M\_m \cdot \left(M\_m \cdot D\_m\right)\right)}}}{\ell}}{\sqrt{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\left(1 - \frac{\left(\left(\left(M\_m \cdot M\_m\right) \cdot 0.25\right) \cdot \left(\frac{D\_m}{d} \cdot \frac{D\_m}{d}\right)\right) \cdot \left(0.5 \cdot h\right)}{\ell}\right) \cdot \frac{d}{{\left(\ell \cdot h\right)}^{0.5}}\\
\end{array}
\end{array}
if d < -8.0000000000000003e-61Initial program 74.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified65.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6474.5%
Applied egg-rr74.5%
*-commutativeN/A
frac-timesN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
associate-*r/N/A
associate-*l/N/A
*-commutativeN/A
*-lowering-*.f64N/A
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
times-fracN/A
metadata-evalN/A
Applied egg-rr62.6%
if -8.0000000000000003e-61 < d < 4.40000000000000014e-218Initial program 40.9%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified29.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr7.3%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6428.5%
Simplified28.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr6.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6462.1%
Simplified62.1%
if 4.40000000000000014e-218 < d < 5.4999999999999997e-79Initial program 61.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified39.6%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.7%
Applied egg-rr61.7%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6467.1%
Applied egg-rr67.1%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr92.8%
if 5.4999999999999997e-79 < d < 4.9999999999999997e111Initial program 75.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified75.7%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr75.3%
Applied egg-rr78.2%
clear-numN/A
associate-/l*N/A
*-lowering-*.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
Applied egg-rr90.0%
if 4.9999999999999997e111 < d Initial program 82.7%
Applied egg-rr78.1%
Final simplification71.9%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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.4e+222)
(/ (sqrt (/ d h)) (pow (/ l d) 0.5))
(if (<= l -1.7e+75)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= l 2.5e-285)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= l 2.25e+169)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(* d (/ (pow l -0.5) (sqrt h))))))))M_m = fabs(M);
D_m = fabs(D);
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.4e+222) {
tmp = sqrt((d / h)) / pow((l / d), 0.5);
} else if (l <= -1.7e+75) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (l <= 2.25e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else {
tmp = d * (pow(l, -0.5) / sqrt(h));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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.4d+222)) then
tmp = sqrt((d / h)) / ((l / d) ** 0.5d0)
else if (l <= (-1.7d+75)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (l <= 2.5d-285) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (l <= 2.25d+169) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else
tmp = d * ((l ** (-0.5d0)) / sqrt(h))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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.4e+222) {
tmp = Math.sqrt((d / h)) / Math.pow((l / d), 0.5);
} else if (l <= -1.7e+75) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (l <= 2.25e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else {
tmp = d * (Math.pow(l, -0.5) / Math.sqrt(h));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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.4e+222: tmp = math.sqrt((d / h)) / math.pow((l / d), 0.5) elif l <= -1.7e+75: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif l <= 2.5e-285: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif l <= 2.25e+169: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) else: tmp = d * (math.pow(l, -0.5) / math.sqrt(h)) return tmp
M_m = abs(M) D_m = abs(D) 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.4e+222) tmp = Float64(sqrt(Float64(d / h)) / (Float64(l / d) ^ 0.5)); elseif (l <= -1.7e+75) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (l <= 2.5e-285) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (l <= 2.25e+169) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); else tmp = Float64(d * Float64((l ^ -0.5) / sqrt(h))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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.4e+222)
tmp = sqrt((d / h)) / ((l / d) ^ 0.5);
elseif (l <= -1.7e+75)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (l <= 2.5e-285)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (l <= 2.25e+169)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
else
tmp = d * ((l ^ -0.5) / sqrt(h));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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.4e+222], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] / N[Power[N[(l / d), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -1.7e+75], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.5e-285], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.25e+169], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d * N[(N[Power[l, -0.5], $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\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.4 \cdot 10^{+222}:\\
\;\;\;\;\frac{\sqrt{\frac{d}{h}}}{{\left(\frac{\ell}{d}\right)}^{0.5}}\\
\mathbf{elif}\;\ell \leq -1.7 \cdot 10^{+75}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 2.5 \cdot 10^{-285}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;\ell \leq 2.25 \cdot 10^{+169}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{{\ell}^{-0.5}}{\sqrt{h}}\\
\end{array}
\end{array}
if l < -9.3999999999999998e222Initial program 57.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified50.5%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6410.1%
Simplified10.1%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6410.1%
Applied egg-rr10.1%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
associate-*l/N/A
clear-numN/A
div-invN/A
clear-numN/A
sqrt-divN/A
sqrt-divN/A
pow1/2N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
pow1/2N/A
sqrt-divN/A
pow1/2N/A
pow-lowering-pow.f64N/A
/-lowering-/.f6458.7%
Applied egg-rr58.7%
if -9.3999999999999998e222 < l < -1.70000000000000006e75Initial program 45.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified44.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6445.4%
Applied egg-rr45.4%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6455.4%
Simplified55.4%
if -1.70000000000000006e75 < l < 2.50000000000000009e-285Initial program 72.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.8%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.5%
Simplified50.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr3.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6457.5%
Simplified57.5%
if 2.50000000000000009e-285 < l < 2.25e169Initial program 70.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6470.3%
Applied egg-rr70.3%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.3%
Applied egg-rr73.3%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.2%
Applied egg-rr77.2%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr83.9%
if 2.25e169 < l Initial program 66.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6444.3%
Simplified44.3%
associate-/l/N/A
associate-/r*N/A
sqrt-divN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow1/2N/A
pow-flipN/A
metadata-evalN/A
pow-lowering-pow.f64N/A
sqrt-lowering-sqrt.f6481.0%
Applied egg-rr81.0%
Final simplification70.1%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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+222)
(* (sqrt (/ d h)) (sqrt (/ d l)))
(if (<= l -2.05e+75)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= l 2.5e-285)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= l 2e+169)
(*
(+
1.0
(/
(* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m)))
(* d 4.0)))
(* d (pow (* l h) -0.5)))
(* d (/ (pow l -0.5) (sqrt h))))))))M_m = fabs(M);
D_m = fabs(D);
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+222) {
tmp = sqrt((d / h)) * sqrt((d / l));
} else if (l <= -2.05e+75) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (l <= 2e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else {
tmp = d * (pow(l, -0.5) / sqrt(h));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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+222)) then
tmp = sqrt((d / h)) * sqrt((d / l))
else if (l <= (-2.05d+75)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (l <= 2.5d-285) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (l <= 2d+169) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else
tmp = d * ((l ** (-0.5d0)) / sqrt(h))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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+222) {
tmp = Math.sqrt((d / h)) * Math.sqrt((d / l));
} else if (l <= -2.05e+75) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (l <= 2e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else {
tmp = d * (Math.pow(l, -0.5) / Math.sqrt(h));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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+222: tmp = math.sqrt((d / h)) * math.sqrt((d / l)) elif l <= -2.05e+75: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif l <= 2.5e-285: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif l <= 2e+169: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) else: tmp = d * (math.pow(l, -0.5) / math.sqrt(h)) return tmp
M_m = abs(M) D_m = abs(D) 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+222) tmp = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))); elseif (l <= -2.05e+75) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (l <= 2.5e-285) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (l <= 2e+169) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); else tmp = Float64(d * Float64((l ^ -0.5) / sqrt(h))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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+222)
tmp = sqrt((d / h)) * sqrt((d / l));
elseif (l <= -2.05e+75)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (l <= 2.5e-285)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (l <= 2e+169)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
else
tmp = d * ((l ^ -0.5) / sqrt(h));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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+222], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -2.05e+75], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.5e-285], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2e+169], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d * N[(N[Power[l, -0.5], $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\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^{+222}:\\
\;\;\;\;\sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;\ell \leq -2.05 \cdot 10^{+75}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 2.5 \cdot 10^{-285}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;\ell \leq 2 \cdot 10^{+169}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{{\ell}^{-0.5}}{\sqrt{h}}\\
\end{array}
\end{array}
if l < -9.5000000000000001e222Initial program 57.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified50.5%
Taylor expanded in d around inf
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6458.4%
Simplified58.4%
if -9.5000000000000001e222 < l < -2.0499999999999999e75Initial program 45.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified44.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6445.4%
Applied egg-rr45.4%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6455.4%
Simplified55.4%
if -2.0499999999999999e75 < l < 2.50000000000000009e-285Initial program 72.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.8%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.5%
Simplified50.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr3.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6457.5%
Simplified57.5%
if 2.50000000000000009e-285 < l < 1.99999999999999987e169Initial program 70.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6470.3%
Applied egg-rr70.3%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.3%
Applied egg-rr73.3%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.2%
Applied egg-rr77.2%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr83.9%
if 1.99999999999999987e169 < l Initial program 66.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6444.3%
Simplified44.3%
associate-/l/N/A
associate-/r*N/A
sqrt-divN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow1/2N/A
pow-flipN/A
metadata-evalN/A
pow-lowering-pow.f64N/A
sqrt-lowering-sqrt.f6481.0%
Applied egg-rr81.0%
Final simplification70.1%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 -3.3e+75)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= l 2.5e-285)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= l 2.6e+169)
(*
(+
1.0
(/ (* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(* d (/ (pow l -0.5) (sqrt h)))))))M_m = fabs(M);
D_m = fabs(D);
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 <= -3.3e+75) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (l <= 2.6e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else {
tmp = d * (pow(l, -0.5) / sqrt(h));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 <= (-3.3d+75)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (l <= 2.5d-285) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (l <= 2.6d+169) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else
tmp = d * ((l ** (-0.5d0)) / sqrt(h))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 <= -3.3e+75) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (l <= 2.6e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else {
tmp = d * (Math.pow(l, -0.5) / Math.sqrt(h));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 <= -3.3e+75: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif l <= 2.5e-285: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif l <= 2.6e+169: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) else: tmp = d * (math.pow(l, -0.5) / math.sqrt(h)) return tmp
M_m = abs(M) D_m = abs(D) 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 <= -3.3e+75) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (l <= 2.5e-285) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (l <= 2.6e+169) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); else tmp = Float64(d * Float64((l ^ -0.5) / sqrt(h))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 <= -3.3e+75)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (l <= 2.5e-285)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (l <= 2.6e+169)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
else
tmp = d * ((l ^ -0.5) / sqrt(h));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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, -3.3e+75], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.5e-285], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.6e+169], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d * N[(N[Power[l, -0.5], $MachinePrecision] / N[Sqrt[h], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq -3.3 \cdot 10^{+75}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 2.5 \cdot 10^{-285}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;\ell \leq 2.6 \cdot 10^{+169}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{{\ell}^{-0.5}}{\sqrt{h}}\\
\end{array}
\end{array}
if l < -3.29999999999999998e75Initial program 50.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified47.2%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6450.6%
Applied egg-rr50.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6448.7%
Simplified48.7%
if -3.29999999999999998e75 < l < 2.50000000000000009e-285Initial program 72.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.8%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.5%
Simplified50.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr3.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6457.5%
Simplified57.5%
if 2.50000000000000009e-285 < l < 2.6e169Initial program 70.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6470.3%
Applied egg-rr70.3%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.3%
Applied egg-rr73.3%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.2%
Applied egg-rr77.2%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr83.9%
if 2.6e169 < l Initial program 66.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6444.3%
Simplified44.3%
associate-/l/N/A
associate-/r*N/A
sqrt-divN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow1/2N/A
pow-flipN/A
metadata-evalN/A
pow-lowering-pow.f64N/A
sqrt-lowering-sqrt.f6481.0%
Applied egg-rr81.0%
Final simplification68.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 -1.02e+76)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= l 2.5e-285)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(if (<= l 1.36e+169)
(*
(+
1.0
(/ (* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5)))
(/ (/ d (sqrt h)) (sqrt l))))))M_m = fabs(M);
D_m = fabs(D);
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 <= -1.02e+76) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else if (l <= 1.36e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
} else {
tmp = (d / sqrt(h)) / sqrt(l);
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 <= (-1.02d+76)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (l <= 2.5d-285) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else if (l <= 1.36d+169) then
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
else
tmp = (d / sqrt(h)) / sqrt(l)
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 <= -1.02e+76) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (l <= 2.5e-285) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else if (l <= 1.36e+169) {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
} else {
tmp = (d / Math.sqrt(h)) / Math.sqrt(l);
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 <= -1.02e+76: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif l <= 2.5e-285: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) elif l <= 1.36e+169: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) else: tmp = (d / math.sqrt(h)) / math.sqrt(l) return tmp
M_m = abs(M) D_m = abs(D) 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 <= -1.02e+76) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (l <= 2.5e-285) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); elseif (l <= 1.36e+169) tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); else tmp = Float64(Float64(d / sqrt(h)) / sqrt(l)); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 <= -1.02e+76)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (l <= 2.5e-285)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
elseif (l <= 1.36e+169)
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
else
tmp = (d / sqrt(h)) / sqrt(l);
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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, -1.02e+76], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.5e-285], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 1.36e+169], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(d / N[Sqrt[h], $MachinePrecision]), $MachinePrecision] / N[Sqrt[l], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq -1.02 \cdot 10^{+76}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 2.5 \cdot 10^{-285}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{elif}\;\ell \leq 1.36 \cdot 10^{+169}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{h}}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if l < -1.02000000000000007e76Initial program 50.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified47.2%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6450.6%
Applied egg-rr50.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6448.7%
Simplified48.7%
if -1.02000000000000007e76 < l < 2.50000000000000009e-285Initial program 72.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.8%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.5%
Simplified50.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr3.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6457.5%
Simplified57.5%
if 2.50000000000000009e-285 < l < 1.36000000000000001e169Initial program 70.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6470.3%
Applied egg-rr70.3%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6473.3%
Applied egg-rr73.3%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.2%
Applied egg-rr77.2%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr83.9%
if 1.36000000000000001e169 < l Initial program 66.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6444.3%
Simplified44.3%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6442.3%
Applied egg-rr42.3%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
associate-*l/N/A
sqrt-divN/A
/-lowering-/.f64N/A
associate-*r/N/A
sqrt-divN/A
sqrt-prodN/A
rem-square-sqrtN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
sqrt-lowering-sqrt.f6478.4%
Applied egg-rr78.4%
Final simplification68.0%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ (/ 1.0 h) l))))
(if (<= l -7.4e+74)
(* t_0 (- 0.0 d))
(if (<= l -5e-310)
(*
(* (* D_m D_m) (* (* M_m M_m) (sqrt (/ (/ h (* l l)) l))))
(/ 0.125 d))
(if (<= l 3.8e-233)
(* d (sqrt (/ 1.0 (* l h))))
(if (<= l 2.5e-49)
(*
(sqrt (/ h (* l (* l l))))
(* (* D_m (* D_m (* M_m M_m))) (/ -0.125 d)))
(if (<= l 4.2e+134)
(* d t_0)
(/ 1.0 (sqrt (* (/ l d) (/ h d)))))))))))M_m = fabs(M);
D_m = fabs(D);
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(((1.0 / h) / l));
double tmp;
if (l <= -7.4e+74) {
tmp = t_0 * (0.0 - d);
} else if (l <= -5e-310) {
tmp = ((D_m * D_m) * ((M_m * M_m) * sqrt(((h / (l * l)) / l)))) * (0.125 / d);
} else if (l <= 3.8e-233) {
tmp = d * sqrt((1.0 / (l * h)));
} else if (l <= 2.5e-49) {
tmp = sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
} else if (l <= 4.2e+134) {
tmp = d * t_0;
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt(((1.0d0 / h) / l))
if (l <= (-7.4d+74)) then
tmp = t_0 * (0.0d0 - d)
else if (l <= (-5d-310)) then
tmp = ((d_m * d_m) * ((m_m * m_m) * sqrt(((h / (l * l)) / l)))) * (0.125d0 / d)
else if (l <= 3.8d-233) then
tmp = d * sqrt((1.0d0 / (l * h)))
else if (l <= 2.5d-49) then
tmp = sqrt((h / (l * (l * l)))) * ((d_m * (d_m * (m_m * m_m))) * ((-0.125d0) / d))
else if (l <= 4.2d+134) then
tmp = d * t_0
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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(((1.0 / h) / l));
double tmp;
if (l <= -7.4e+74) {
tmp = t_0 * (0.0 - d);
} else if (l <= -5e-310) {
tmp = ((D_m * D_m) * ((M_m * M_m) * Math.sqrt(((h / (l * l)) / l)))) * (0.125 / d);
} else if (l <= 3.8e-233) {
tmp = d * Math.sqrt((1.0 / (l * h)));
} else if (l <= 2.5e-49) {
tmp = Math.sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
} else if (l <= 4.2e+134) {
tmp = d * t_0;
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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(((1.0 / h) / l)) tmp = 0 if l <= -7.4e+74: tmp = t_0 * (0.0 - d) elif l <= -5e-310: tmp = ((D_m * D_m) * ((M_m * M_m) * math.sqrt(((h / (l * l)) / l)))) * (0.125 / d) elif l <= 3.8e-233: tmp = d * math.sqrt((1.0 / (l * h))) elif l <= 2.5e-49: tmp = math.sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d)) elif l <= 4.2e+134: tmp = d * t_0 else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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(Float64(1.0 / h) / l)) tmp = 0.0 if (l <= -7.4e+74) tmp = Float64(t_0 * Float64(0.0 - d)); elseif (l <= -5e-310) tmp = Float64(Float64(Float64(D_m * D_m) * Float64(Float64(M_m * M_m) * sqrt(Float64(Float64(h / Float64(l * l)) / l)))) * Float64(0.125 / d)); elseif (l <= 3.8e-233) tmp = Float64(d * sqrt(Float64(1.0 / Float64(l * h)))); elseif (l <= 2.5e-49) tmp = Float64(sqrt(Float64(h / Float64(l * Float64(l * l)))) * Float64(Float64(D_m * Float64(D_m * Float64(M_m * M_m))) * Float64(-0.125 / d))); elseif (l <= 4.2e+134) tmp = Float64(d * t_0); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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(((1.0 / h) / l));
tmp = 0.0;
if (l <= -7.4e+74)
tmp = t_0 * (0.0 - d);
elseif (l <= -5e-310)
tmp = ((D_m * D_m) * ((M_m * M_m) * sqrt(((h / (l * l)) / l)))) * (0.125 / d);
elseif (l <= 3.8e-233)
tmp = d * sqrt((1.0 / (l * h)));
elseif (l <= 2.5e-49)
tmp = sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
elseif (l <= 4.2e+134)
tmp = d * t_0;
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[l, -7.4e+74], N[(t$95$0 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -5e-310], N[(N[(N[(D$95$m * D$95$m), $MachinePrecision] * N[(N[(M$95$m * M$95$m), $MachinePrecision] * N[Sqrt[N[(N[(h / N[(l * l), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.125 / d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 3.8e-233], N[(d * N[Sqrt[N[(1.0 / N[(l * h), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.5e-49], N[(N[Sqrt[N[(h / N[(l * N[(l * l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[(N[(D$95$m * N[(D$95$m * N[(M$95$m * M$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(-0.125 / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 4.2e+134], N[(d * t$95$0), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;\ell \leq -7.4 \cdot 10^{+74}:\\
\;\;\;\;t\_0 \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq -5 \cdot 10^{-310}:\\
\;\;\;\;\left(\left(D\_m \cdot D\_m\right) \cdot \left(\left(M\_m \cdot M\_m\right) \cdot \sqrt{\frac{\frac{h}{\ell \cdot \ell}}{\ell}}\right)\right) \cdot \frac{0.125}{d}\\
\mathbf{elif}\;\ell \leq 3.8 \cdot 10^{-233}:\\
\;\;\;\;d \cdot \sqrt{\frac{1}{\ell \cdot h}}\\
\mathbf{elif}\;\ell \leq 2.5 \cdot 10^{-49}:\\
\;\;\;\;\sqrt{\frac{h}{\ell \cdot \left(\ell \cdot \ell\right)}} \cdot \left(\left(D\_m \cdot \left(D\_m \cdot \left(M\_m \cdot M\_m\right)\right)\right) \cdot \frac{-0.125}{d}\right)\\
\mathbf{elif}\;\ell \leq 4.2 \cdot 10^{+134}:\\
\;\;\;\;d \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if l < -7.4000000000000002e74Initial program 50.7%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified47.2%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6450.6%
Applied egg-rr50.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6448.7%
Simplified48.7%
if -7.4000000000000002e74 < l < -4.999999999999985e-310Initial program 71.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified57.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr0.0%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6451.2%
Simplified51.2%
Taylor expanded in l around 0
*-commutativeN/A
associate-*l/N/A
associate-*l/N/A
associate-/l*N/A
*-lowering-*.f64N/A
Simplified52.6%
if -4.999999999999985e-310 < l < 3.8e-233Initial program 46.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified37.1%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6461.1%
Simplified61.1%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.2%
Applied egg-rr61.2%
if 3.8e-233 < l < 2.4999999999999999e-49Initial program 67.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.5%
Taylor expanded in d around 0
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
associate-*r/N/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
/-lowering-/.f6455.9%
Simplified55.9%
if 2.4999999999999999e-49 < l < 4.2000000000000002e134Initial program 81.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified54.0%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6463.1%
Simplified63.1%
if 4.2000000000000002e134 < l Initial program 64.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.2%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.4%
Simplified42.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6440.5%
Applied egg-rr40.5%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Applied egg-rr56.1%
Final simplification54.8%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 -1.58e-58)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= d 3.6e-215)
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))
(*
(+
1.0
(/ (* (/ -0.5 (* l (/ d (* M_m D_m)))) (* h (* M_m D_m))) (* d 4.0)))
(* d (pow (* l h) -0.5))))))M_m = fabs(M);
D_m = fabs(D);
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 <= -1.58e-58) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (d <= 3.6e-215) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
} else {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * pow((l * h), -0.5));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 <= (-1.58d-58)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (d <= 3.6d-215) then
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
else
tmp = (1.0d0 + ((((-0.5d0) / (l * (d / (m_m * d_m)))) * (h * (m_m * d_m))) / (d * 4.0d0))) * (d * ((l * h) ** (-0.5d0)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 <= -1.58e-58) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (d <= 3.6e-215) {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
} else {
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * Math.pow((l * h), -0.5));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 <= -1.58e-58: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif d <= 3.6e-215: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) else: tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * math.pow((l * h), -0.5)) return tmp
M_m = abs(M) D_m = abs(D) 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 <= -1.58e-58) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (d <= 3.6e-215) tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); else tmp = Float64(Float64(1.0 + Float64(Float64(Float64(-0.5 / Float64(l * Float64(d / Float64(M_m * D_m)))) * Float64(h * Float64(M_m * D_m))) / Float64(d * 4.0))) * Float64(d * (Float64(l * h) ^ -0.5))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 <= -1.58e-58)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (d <= 3.6e-215)
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
else
tmp = (1.0 + (((-0.5 / (l * (d / (M_m * D_m)))) * (h * (M_m * D_m))) / (d * 4.0))) * (d * ((l * h) ^ -0.5));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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, -1.58e-58], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 3.6e-215], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 + N[(N[(N[(-0.5 / N[(l * N[(d / N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(h * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(d * N[Power[N[(l * h), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;d \leq -1.58 \cdot 10^{-58}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;d \leq 3.6 \cdot 10^{-215}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(1 + \frac{\frac{-0.5}{\ell \cdot \frac{d}{M\_m \cdot D\_m}} \cdot \left(h \cdot \left(M\_m \cdot D\_m\right)\right)}{d \cdot 4}\right) \cdot \left(d \cdot {\left(\ell \cdot h\right)}^{-0.5}\right)\\
\end{array}
\end{array}
if d < -1.57999999999999997e-58Initial program 74.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified65.3%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6474.5%
Applied egg-rr74.5%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6451.3%
Simplified51.3%
if -1.57999999999999997e-58 < d < 3.5999999999999999e-215Initial program 40.9%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified29.3%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr7.3%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6428.5%
Simplified28.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr6.8%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6462.1%
Simplified62.1%
if 3.5999999999999999e-215 < d Initial program 76.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified60.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6476.6%
Applied egg-rr76.6%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6477.5%
Applied egg-rr77.5%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6481.3%
Applied egg-rr81.3%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr79.9%
Final simplification66.4%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ 1.0 (* l h))) (t_1 (sqrt (/ (/ 1.0 h) l))))
(if (<= l -5.6e-162)
(* t_1 (- 0.0 d))
(if (<= l 1.15e-233)
(* d (pow (* t_0 t_0) 0.25))
(if (<= l 2.2e-50)
(*
(sqrt (/ h (* l (* l l))))
(* (* D_m (* D_m (* M_m M_m))) (/ -0.125 d)))
(if (<= l 7e+134) (* d t_1) (/ 1.0 (sqrt (* (/ l d) (/ h d))))))))))M_m = fabs(M);
D_m = fabs(D);
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 = 1.0 / (l * h);
double t_1 = sqrt(((1.0 / h) / l));
double tmp;
if (l <= -5.6e-162) {
tmp = t_1 * (0.0 - d);
} else if (l <= 1.15e-233) {
tmp = d * pow((t_0 * t_0), 0.25);
} else if (l <= 2.2e-50) {
tmp = sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
} else if (l <= 7e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 1.0d0 / (l * h)
t_1 = sqrt(((1.0d0 / h) / l))
if (l <= (-5.6d-162)) then
tmp = t_1 * (0.0d0 - d)
else if (l <= 1.15d-233) then
tmp = d * ((t_0 * t_0) ** 0.25d0)
else if (l <= 2.2d-50) then
tmp = sqrt((h / (l * (l * l)))) * ((d_m * (d_m * (m_m * m_m))) * ((-0.125d0) / d))
else if (l <= 7d+134) then
tmp = d * t_1
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = 1.0 / (l * h);
double t_1 = Math.sqrt(((1.0 / h) / l));
double tmp;
if (l <= -5.6e-162) {
tmp = t_1 * (0.0 - d);
} else if (l <= 1.15e-233) {
tmp = d * Math.pow((t_0 * t_0), 0.25);
} else if (l <= 2.2e-50) {
tmp = Math.sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
} else if (l <= 7e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = 1.0 / (l * h) t_1 = math.sqrt(((1.0 / h) / l)) tmp = 0 if l <= -5.6e-162: tmp = t_1 * (0.0 - d) elif l <= 1.15e-233: tmp = d * math.pow((t_0 * t_0), 0.25) elif l <= 2.2e-50: tmp = math.sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d)) elif l <= 7e+134: tmp = d * t_1 else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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(1.0 / Float64(l * h)) t_1 = sqrt(Float64(Float64(1.0 / h) / l)) tmp = 0.0 if (l <= -5.6e-162) tmp = Float64(t_1 * Float64(0.0 - d)); elseif (l <= 1.15e-233) tmp = Float64(d * (Float64(t_0 * t_0) ^ 0.25)); elseif (l <= 2.2e-50) tmp = Float64(sqrt(Float64(h / Float64(l * Float64(l * l)))) * Float64(Float64(D_m * Float64(D_m * Float64(M_m * M_m))) * Float64(-0.125 / d))); elseif (l <= 7e+134) tmp = Float64(d * t_1); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = 1.0 / (l * h);
t_1 = sqrt(((1.0 / h) / l));
tmp = 0.0;
if (l <= -5.6e-162)
tmp = t_1 * (0.0 - d);
elseif (l <= 1.15e-233)
tmp = d * ((t_0 * t_0) ^ 0.25);
elseif (l <= 2.2e-50)
tmp = sqrt((h / (l * (l * l)))) * ((D_m * (D_m * (M_m * M_m))) * (-0.125 / d));
elseif (l <= 7e+134)
tmp = d * t_1;
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(1.0 / N[(l * h), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[l, -5.6e-162], N[(t$95$1 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 1.15e-233], N[(d * N[Power[N[(t$95$0 * t$95$0), $MachinePrecision], 0.25], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 2.2e-50], N[(N[Sqrt[N[(h / N[(l * N[(l * l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[(N[(D$95$m * N[(D$95$m * N[(M$95$m * M$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(-0.125 / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 7e+134], N[(d * t$95$1), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{1}{\ell \cdot h}\\
t_1 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;\ell \leq -5.6 \cdot 10^{-162}:\\
\;\;\;\;t\_1 \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 1.15 \cdot 10^{-233}:\\
\;\;\;\;d \cdot {\left(t\_0 \cdot t\_0\right)}^{0.25}\\
\mathbf{elif}\;\ell \leq 2.2 \cdot 10^{-50}:\\
\;\;\;\;\sqrt{\frac{h}{\ell \cdot \left(\ell \cdot \ell\right)}} \cdot \left(\left(D\_m \cdot \left(D\_m \cdot \left(M\_m \cdot M\_m\right)\right)\right) \cdot \frac{-0.125}{d}\right)\\
\mathbf{elif}\;\ell \leq 7 \cdot 10^{+134}:\\
\;\;\;\;d \cdot t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if l < -5.60000000000000043e-162Initial program 61.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.6%
Applied egg-rr61.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6444.8%
Simplified44.8%
if -5.60000000000000043e-162 < l < 1.1500000000000001e-233Initial program 59.9%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified48.0%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6425.4%
Simplified25.4%
pow1/2N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
pow-prod-upN/A
pow-prod-downN/A
pow-lowering-pow.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-eval48.6%
Applied egg-rr48.6%
if 1.1500000000000001e-233 < l < 2.1999999999999999e-50Initial program 67.1%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified56.5%
Taylor expanded in d around 0
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
associate-*r/N/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
/-lowering-/.f6455.9%
Simplified55.9%
if 2.1999999999999999e-50 < l < 7.00000000000000006e134Initial program 81.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified54.0%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6463.1%
Simplified63.1%
if 7.00000000000000006e134 < l Initial program 64.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.2%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.4%
Simplified42.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6440.5%
Applied egg-rr40.5%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Applied egg-rr56.1%
Final simplification51.8%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ 1.0 (* l h))) (t_1 (sqrt (/ (/ 1.0 h) l))))
(if (<= l -1.22e-163)
(* t_1 (- 0.0 d))
(if (<= l 4.1e-222)
(* d (pow (* t_0 t_0) 0.25))
(if (<= l 3.5e-50)
(*
-0.125
(* (* (* D_m D_m) (sqrt (/ h (* l (* l l))))) (/ (* M_m M_m) d)))
(if (<= l 5e+134) (* d t_1) (/ 1.0 (sqrt (* (/ l d) (/ h d))))))))))M_m = fabs(M);
D_m = fabs(D);
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 = 1.0 / (l * h);
double t_1 = sqrt(((1.0 / h) / l));
double tmp;
if (l <= -1.22e-163) {
tmp = t_1 * (0.0 - d);
} else if (l <= 4.1e-222) {
tmp = d * pow((t_0 * t_0), 0.25);
} else if (l <= 3.5e-50) {
tmp = -0.125 * (((D_m * D_m) * sqrt((h / (l * (l * l))))) * ((M_m * M_m) / d));
} else if (l <= 5e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 1.0d0 / (l * h)
t_1 = sqrt(((1.0d0 / h) / l))
if (l <= (-1.22d-163)) then
tmp = t_1 * (0.0d0 - d)
else if (l <= 4.1d-222) then
tmp = d * ((t_0 * t_0) ** 0.25d0)
else if (l <= 3.5d-50) then
tmp = (-0.125d0) * (((d_m * d_m) * sqrt((h / (l * (l * l))))) * ((m_m * m_m) / d))
else if (l <= 5d+134) then
tmp = d * t_1
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = 1.0 / (l * h);
double t_1 = Math.sqrt(((1.0 / h) / l));
double tmp;
if (l <= -1.22e-163) {
tmp = t_1 * (0.0 - d);
} else if (l <= 4.1e-222) {
tmp = d * Math.pow((t_0 * t_0), 0.25);
} else if (l <= 3.5e-50) {
tmp = -0.125 * (((D_m * D_m) * Math.sqrt((h / (l * (l * l))))) * ((M_m * M_m) / d));
} else if (l <= 5e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = 1.0 / (l * h) t_1 = math.sqrt(((1.0 / h) / l)) tmp = 0 if l <= -1.22e-163: tmp = t_1 * (0.0 - d) elif l <= 4.1e-222: tmp = d * math.pow((t_0 * t_0), 0.25) elif l <= 3.5e-50: tmp = -0.125 * (((D_m * D_m) * math.sqrt((h / (l * (l * l))))) * ((M_m * M_m) / d)) elif l <= 5e+134: tmp = d * t_1 else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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(1.0 / Float64(l * h)) t_1 = sqrt(Float64(Float64(1.0 / h) / l)) tmp = 0.0 if (l <= -1.22e-163) tmp = Float64(t_1 * Float64(0.0 - d)); elseif (l <= 4.1e-222) tmp = Float64(d * (Float64(t_0 * t_0) ^ 0.25)); elseif (l <= 3.5e-50) tmp = Float64(-0.125 * Float64(Float64(Float64(D_m * D_m) * sqrt(Float64(h / Float64(l * Float64(l * l))))) * Float64(Float64(M_m * M_m) / d))); elseif (l <= 5e+134) tmp = Float64(d * t_1); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = 1.0 / (l * h);
t_1 = sqrt(((1.0 / h) / l));
tmp = 0.0;
if (l <= -1.22e-163)
tmp = t_1 * (0.0 - d);
elseif (l <= 4.1e-222)
tmp = d * ((t_0 * t_0) ^ 0.25);
elseif (l <= 3.5e-50)
tmp = -0.125 * (((D_m * D_m) * sqrt((h / (l * (l * l))))) * ((M_m * M_m) / d));
elseif (l <= 5e+134)
tmp = d * t_1;
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(1.0 / N[(l * h), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[l, -1.22e-163], N[(t$95$1 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 4.1e-222], N[(d * N[Power[N[(t$95$0 * t$95$0), $MachinePrecision], 0.25], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 3.5e-50], N[(-0.125 * N[(N[(N[(D$95$m * D$95$m), $MachinePrecision] * N[Sqrt[N[(h / N[(l * N[(l * l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(M$95$m * M$95$m), $MachinePrecision] / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 5e+134], N[(d * t$95$1), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{1}{\ell \cdot h}\\
t_1 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;\ell \leq -1.22 \cdot 10^{-163}:\\
\;\;\;\;t\_1 \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq 4.1 \cdot 10^{-222}:\\
\;\;\;\;d \cdot {\left(t\_0 \cdot t\_0\right)}^{0.25}\\
\mathbf{elif}\;\ell \leq 3.5 \cdot 10^{-50}:\\
\;\;\;\;-0.125 \cdot \left(\left(\left(D\_m \cdot D\_m\right) \cdot \sqrt{\frac{h}{\ell \cdot \left(\ell \cdot \ell\right)}}\right) \cdot \frac{M\_m \cdot M\_m}{d}\right)\\
\mathbf{elif}\;\ell \leq 5 \cdot 10^{+134}:\\
\;\;\;\;d \cdot t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if l < -1.22000000000000003e-163Initial program 61.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.6%
Applied egg-rr61.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6444.8%
Simplified44.8%
if -1.22000000000000003e-163 < l < 4.1000000000000003e-222Initial program 58.2%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified44.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6423.8%
Simplified23.8%
pow1/2N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
pow-prod-upN/A
pow-prod-downN/A
pow-lowering-pow.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-eval45.4%
Applied egg-rr45.4%
if 4.1000000000000003e-222 < l < 3.49999999999999997e-50Initial program 70.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified61.4%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6470.0%
Applied egg-rr70.0%
associate-*l*N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6478.1%
Applied egg-rr78.1%
associate-*r/N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
clear-numN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6480.8%
Applied egg-rr80.8%
Taylor expanded in d around 0
*-lowering-*.f64N/A
*-commutativeN/A
associate-/l*N/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6454.9%
Simplified54.9%
if 3.49999999999999997e-50 < l < 4.99999999999999981e134Initial program 81.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified54.0%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6463.1%
Simplified63.1%
if 4.99999999999999981e134 < l Initial program 64.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.2%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.4%
Simplified42.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6440.5%
Applied egg-rr40.5%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Applied egg-rr56.1%
Final simplification51.0%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (<= (* M_m D_m) 1e+30)
(/ 1.0 (sqrt (* (/ l d) (/ h d))))
(/
-1.0
(* (/ d (* M_m (* D_m (* M_m D_m)))) (* 8.0 (* l (sqrt (/ l h))))))))M_m = fabs(M);
D_m = fabs(D);
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 ((M_m * D_m) <= 1e+30) {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
} else {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 ((m_m * d_m) <= 1d+30) then
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
else
tmp = (-1.0d0) / ((d / (m_m * (d_m * (m_m * d_m)))) * (8.0d0 * (l * sqrt((l / h)))))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 ((M_m * D_m) <= 1e+30) {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
} else {
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * Math.sqrt((l / h)))));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 (M_m * D_m) <= 1e+30: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) else: tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * math.sqrt((l / h))))) return tmp
M_m = abs(M) D_m = abs(D) 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 (Float64(M_m * D_m) <= 1e+30) tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); else tmp = Float64(-1.0 / Float64(Float64(d / Float64(M_m * Float64(D_m * Float64(M_m * D_m)))) * Float64(8.0 * Float64(l * sqrt(Float64(l / h)))))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 ((M_m * D_m) <= 1e+30)
tmp = 1.0 / sqrt(((l / d) * (h / d)));
else
tmp = -1.0 / ((d / (M_m * (D_m * (M_m * D_m)))) * (8.0 * (l * sqrt((l / h)))));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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[N[(M$95$m * D$95$m), $MachinePrecision], 1e+30], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(-1.0 / N[(N[(d / N[(M$95$m * N[(D$95$m * N[(M$95$m * D$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(8.0 * N[(l * N[Sqrt[N[(l / h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;M\_m \cdot D\_m \leq 10^{+30}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{\frac{d}{M\_m \cdot \left(D\_m \cdot \left(M\_m \cdot D\_m\right)\right)} \cdot \left(8 \cdot \left(\ell \cdot \sqrt{\frac{\ell}{h}}\right)\right)}\\
\end{array}
\end{array}
if (*.f64 M D) < 1e30Initial program 61.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified49.6%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6432.4%
Simplified32.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6432.1%
Applied egg-rr32.1%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6443.0%
Applied egg-rr43.0%
if 1e30 < (*.f64 M D) Initial program 77.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified61.8%
*-commutativeN/A
sqrt-divN/A
associate-*r/N/A
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
Applied egg-rr23.0%
Taylor expanded in h around -inf
*-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6433.0%
Simplified33.0%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
associate-/l/N/A
*-commutativeN/A
swap-sqrN/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
pow1/2N/A
associate-*r*N/A
associate-/l*N/A
unpow-prod-downN/A
pow1/2N/A
pow2N/A
sqrt-pow1N/A
metadata-evalN/A
unpow1N/A
Applied egg-rr2.1%
Taylor expanded in h around -inf
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
mul-1-negN/A
neg-lowering-neg.f64N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f6471.8%
Simplified71.8%
Final simplification50.9%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ 1.0 (* l h))) (t_1 (sqrt (/ (/ 1.0 h) l))))
(if (<= l -6e-164)
(* t_1 (- 0.0 d))
(if (<= l -5e-310)
(* d (pow (* t_0 t_0) 0.25))
(if (<= l 1.5e+134) (* d t_1) (/ 1.0 (sqrt (* (/ l d) (/ h d)))))))))M_m = fabs(M);
D_m = fabs(D);
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 = 1.0 / (l * h);
double t_1 = sqrt(((1.0 / h) / l));
double tmp;
if (l <= -6e-164) {
tmp = t_1 * (0.0 - d);
} else if (l <= -5e-310) {
tmp = d * pow((t_0 * t_0), 0.25);
} else if (l <= 1.5e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 1.0d0 / (l * h)
t_1 = sqrt(((1.0d0 / h) / l))
if (l <= (-6d-164)) then
tmp = t_1 * (0.0d0 - d)
else if (l <= (-5d-310)) then
tmp = d * ((t_0 * t_0) ** 0.25d0)
else if (l <= 1.5d+134) then
tmp = d * t_1
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 = 1.0 / (l * h);
double t_1 = Math.sqrt(((1.0 / h) / l));
double tmp;
if (l <= -6e-164) {
tmp = t_1 * (0.0 - d);
} else if (l <= -5e-310) {
tmp = d * Math.pow((t_0 * t_0), 0.25);
} else if (l <= 1.5e+134) {
tmp = d * t_1;
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 = 1.0 / (l * h) t_1 = math.sqrt(((1.0 / h) / l)) tmp = 0 if l <= -6e-164: tmp = t_1 * (0.0 - d) elif l <= -5e-310: tmp = d * math.pow((t_0 * t_0), 0.25) elif l <= 1.5e+134: tmp = d * t_1 else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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(1.0 / Float64(l * h)) t_1 = sqrt(Float64(Float64(1.0 / h) / l)) tmp = 0.0 if (l <= -6e-164) tmp = Float64(t_1 * Float64(0.0 - d)); elseif (l <= -5e-310) tmp = Float64(d * (Float64(t_0 * t_0) ^ 0.25)); elseif (l <= 1.5e+134) tmp = Float64(d * t_1); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 = 1.0 / (l * h);
t_1 = sqrt(((1.0 / h) / l));
tmp = 0.0;
if (l <= -6e-164)
tmp = t_1 * (0.0 - d);
elseif (l <= -5e-310)
tmp = d * ((t_0 * t_0) ^ 0.25);
elseif (l <= 1.5e+134)
tmp = d * t_1;
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(1.0 / N[(l * h), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[l, -6e-164], N[(t$95$1 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -5e-310], N[(d * N[Power[N[(t$95$0 * t$95$0), $MachinePrecision], 0.25], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 1.5e+134], N[(d * t$95$1), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \frac{1}{\ell \cdot h}\\
t_1 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;\ell \leq -6 \cdot 10^{-164}:\\
\;\;\;\;t\_1 \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq -5 \cdot 10^{-310}:\\
\;\;\;\;d \cdot {\left(t\_0 \cdot t\_0\right)}^{0.25}\\
\mathbf{elif}\;\ell \leq 1.5 \cdot 10^{+134}:\\
\;\;\;\;d \cdot t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if l < -6.0000000000000002e-164Initial program 61.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.6%
Applied egg-rr61.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6444.8%
Simplified44.8%
if -6.0000000000000002e-164 < l < -4.999999999999985e-310Initial program 64.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.9%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6412.8%
Simplified12.8%
pow1/2N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
pow-prod-upN/A
pow-prod-downN/A
pow-lowering-pow.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-eval52.3%
Applied egg-rr52.3%
if -4.999999999999985e-310 < l < 1.49999999999999998e134Initial program 71.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.0%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6445.9%
Simplified45.9%
if 1.49999999999999998e134 < l Initial program 64.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.2%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.4%
Simplified42.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6440.5%
Applied egg-rr40.5%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Applied egg-rr56.1%
Final simplification47.7%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (/ (/ 1.0 h) l))))
(if (<= l -3.3e-165)
(* t_0 (- 0.0 d))
(if (<= l -1e-292)
(* d (pow (* (* l h) (* l h)) -0.25))
(if (<= l 3.5e+134) (* d t_0) (/ 1.0 (sqrt (* (/ l d) (/ h d)))))))))M_m = fabs(M);
D_m = fabs(D);
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(((1.0 / h) / l));
double tmp;
if (l <= -3.3e-165) {
tmp = t_0 * (0.0 - d);
} else if (l <= -1e-292) {
tmp = d * pow(((l * h) * (l * h)), -0.25);
} else if (l <= 3.5e+134) {
tmp = d * t_0;
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt(((1.0d0 / h) / l))
if (l <= (-3.3d-165)) then
tmp = t_0 * (0.0d0 - d)
else if (l <= (-1d-292)) then
tmp = d * (((l * h) * (l * h)) ** (-0.25d0))
else if (l <= 3.5d+134) then
tmp = d * t_0
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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(((1.0 / h) / l));
double tmp;
if (l <= -3.3e-165) {
tmp = t_0 * (0.0 - d);
} else if (l <= -1e-292) {
tmp = d * Math.pow(((l * h) * (l * h)), -0.25);
} else if (l <= 3.5e+134) {
tmp = d * t_0;
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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(((1.0 / h) / l)) tmp = 0 if l <= -3.3e-165: tmp = t_0 * (0.0 - d) elif l <= -1e-292: tmp = d * math.pow(((l * h) * (l * h)), -0.25) elif l <= 3.5e+134: tmp = d * t_0 else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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(Float64(1.0 / h) / l)) tmp = 0.0 if (l <= -3.3e-165) tmp = Float64(t_0 * Float64(0.0 - d)); elseif (l <= -1e-292) tmp = Float64(d * (Float64(Float64(l * h) * Float64(l * h)) ^ -0.25)); elseif (l <= 3.5e+134) tmp = Float64(d * t_0); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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(((1.0 / h) / l));
tmp = 0.0;
if (l <= -3.3e-165)
tmp = t_0 * (0.0 - d);
elseif (l <= -1e-292)
tmp = d * (((l * h) * (l * h)) ^ -0.25);
elseif (l <= 3.5e+134)
tmp = d * t_0;
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[l, -3.3e-165], N[(t$95$0 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -1e-292], N[(d * N[Power[N[(N[(l * h), $MachinePrecision] * N[(l * h), $MachinePrecision]), $MachinePrecision], -0.25], $MachinePrecision]), $MachinePrecision], If[LessEqual[l, 3.5e+134], N[(d * t$95$0), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;\ell \leq -3.3 \cdot 10^{-165}:\\
\;\;\;\;t\_0 \cdot \left(0 - d\right)\\
\mathbf{elif}\;\ell \leq -1 \cdot 10^{-292}:\\
\;\;\;\;d \cdot {\left(\left(\ell \cdot h\right) \cdot \left(\ell \cdot h\right)\right)}^{-0.25}\\
\mathbf{elif}\;\ell \leq 3.5 \cdot 10^{+134}:\\
\;\;\;\;d \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if l < -3.2999999999999998e-165Initial program 61.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.0%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6461.6%
Applied egg-rr61.6%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6444.8%
Simplified44.8%
if -3.2999999999999998e-165 < l < -1.0000000000000001e-292Initial program 63.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified50.3%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6413.1%
Simplified13.1%
*-commutativeN/A
*-lowering-*.f64N/A
associate-/l/N/A
inv-powN/A
sqrt-pow1N/A
metadata-evalN/A
pow-lowering-pow.f64N/A
*-lowering-*.f6413.1%
Applied egg-rr13.1%
sqr-powN/A
pow-prod-downN/A
pow-lowering-pow.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-eval50.7%
Applied egg-rr50.7%
if -1.0000000000000001e-292 < l < 3.50000000000000003e134Initial program 71.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.5%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6445.4%
Simplified45.4%
if 3.50000000000000003e134 < l Initial program 64.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.2%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.4%
Simplified42.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6440.5%
Applied egg-rr40.5%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Applied egg-rr56.1%
Final simplification47.3%
M_m = (fabs.f64 M)
D_m = (fabs.f64 D)
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 (<= h -5e-310)
(* (sqrt (/ (/ 1.0 h) l)) (- 0.0 d))
(if (<= h 3.2e+19)
(/ d (sqrt (* l h)))
(/ 1.0 (sqrt (* (/ l d) (/ h d)))))))M_m = fabs(M);
D_m = fabs(D);
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 (h <= -5e-310) {
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (h <= 3.2e+19) {
tmp = d / sqrt((l * h));
} else {
tmp = 1.0 / sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 (h <= (-5d-310)) then
tmp = sqrt(((1.0d0 / h) / l)) * (0.0d0 - d)
else if (h <= 3.2d+19) then
tmp = d / sqrt((l * h))
else
tmp = 1.0d0 / sqrt(((l / d) * (h / d)))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 (h <= -5e-310) {
tmp = Math.sqrt(((1.0 / h) / l)) * (0.0 - d);
} else if (h <= 3.2e+19) {
tmp = d / Math.sqrt((l * h));
} else {
tmp = 1.0 / Math.sqrt(((l / d) * (h / d)));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 h <= -5e-310: tmp = math.sqrt(((1.0 / h) / l)) * (0.0 - d) elif h <= 3.2e+19: tmp = d / math.sqrt((l * h)) else: tmp = 1.0 / math.sqrt(((l / d) * (h / d))) return tmp
M_m = abs(M) D_m = abs(D) 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 (h <= -5e-310) tmp = Float64(sqrt(Float64(Float64(1.0 / h) / l)) * Float64(0.0 - d)); elseif (h <= 3.2e+19) tmp = Float64(d / sqrt(Float64(l * h))); else tmp = Float64(1.0 / sqrt(Float64(Float64(l / d) * Float64(h / d)))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 (h <= -5e-310)
tmp = sqrt(((1.0 / h) / l)) * (0.0 - d);
elseif (h <= 3.2e+19)
tmp = d / sqrt((l * h));
else
tmp = 1.0 / sqrt(((l / d) * (h / d)));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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[h, -5e-310], N[(N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision] * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], If[LessEqual[h, 3.2e+19], N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(1.0 / N[Sqrt[N[(N[(l / d), $MachinePrecision] * N[(h / d), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;h \leq -5 \cdot 10^{-310}:\\
\;\;\;\;\sqrt{\frac{\frac{1}{h}}{\ell}} \cdot \left(0 - d\right)\\
\mathbf{elif}\;h \leq 3.2 \cdot 10^{+19}:\\
\;\;\;\;\frac{d}{\sqrt{\ell \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d} \cdot \frac{h}{d}}}\\
\end{array}
\end{array}
if h < -4.999999999999985e-310Initial program 62.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified52.8%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6462.4%
Applied egg-rr62.4%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6441.2%
Simplified41.2%
if -4.999999999999985e-310 < h < 3.2e19Initial program 66.4%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified52.6%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6456.1%
Simplified56.1%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6456.0%
Applied egg-rr56.0%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f6456.1%
Applied egg-rr56.1%
if 3.2e19 < h Initial program 73.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified53.7%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6430.5%
Simplified30.5%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6429.4%
Applied egg-rr29.4%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
clear-numN/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
sqrt-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.9%
Applied egg-rr42.9%
Final simplification45.8%
M_m = (fabs.f64 M) D_m = (fabs.f64 D) 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 (/ (/ 1.0 h) l)))) (if (<= d 5.2e-228) (* t_0 (- 0.0 d)) (* d t_0))))
M_m = fabs(M);
D_m = fabs(D);
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(((1.0 / h) / l));
double tmp;
if (d <= 5.2e-228) {
tmp = t_0 * (0.0 - d);
} else {
tmp = d * t_0;
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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) :: t_0
real(8) :: tmp
t_0 = sqrt(((1.0d0 / h) / l))
if (d <= 5.2d-228) then
tmp = t_0 * (0.0d0 - d)
else
tmp = d * t_0
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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(((1.0 / h) / l));
double tmp;
if (d <= 5.2e-228) {
tmp = t_0 * (0.0 - d);
} else {
tmp = d * t_0;
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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(((1.0 / h) / l)) tmp = 0 if d <= 5.2e-228: tmp = t_0 * (0.0 - d) else: tmp = d * t_0 return tmp
M_m = abs(M) D_m = abs(D) 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(Float64(1.0 / h) / l)) tmp = 0.0 if (d <= 5.2e-228) tmp = Float64(t_0 * Float64(0.0 - d)); else tmp = Float64(d * t_0); end return tmp end
M_m = abs(M);
D_m = abs(D);
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(((1.0 / h) / l));
tmp = 0.0;
if (d <= 5.2e-228)
tmp = t_0 * (0.0 - d);
else
tmp = d * t_0;
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision]
D_m = N[Abs[D], $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[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[d, 5.2e-228], N[(t$95$0 * N[(0.0 - d), $MachinePrecision]), $MachinePrecision], N[(d * t$95$0), $MachinePrecision]]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
t_0 := \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\mathbf{if}\;d \leq 5.2 \cdot 10^{-228}:\\
\;\;\;\;t\_0 \cdot \left(0 - d\right)\\
\mathbf{else}:\\
\;\;\;\;d \cdot t\_0\\
\end{array}
\end{array}
if d < 5.2e-228Initial program 59.3%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified48.7%
associate-*r*N/A
times-fracN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f6459.3%
Applied egg-rr59.3%
Taylor expanded in l around -inf
*-commutativeN/A
*-commutativeN/A
unpow2N/A
rem-square-sqrtN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
mul-1-negN/A
neg-lowering-neg.f6439.3%
Simplified39.3%
if 5.2e-228 < d Initial program 74.6%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified58.4%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6448.9%
Simplified48.9%
Final simplification43.5%
M_m = (fabs.f64 M) D_m = (fabs.f64 D) 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.2e-256) (sqrt (/ (/ d (/ h d)) l)) (* d (sqrt (/ (/ 1.0 h) l)))))
M_m = fabs(M);
D_m = fabs(D);
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.2e-256) {
tmp = sqrt(((d / (h / d)) / l));
} else {
tmp = d * sqrt(((1.0 / h) / l));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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.2d-256)) then
tmp = sqrt(((d / (h / d)) / l))
else
tmp = d * sqrt(((1.0d0 / h) / l))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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.2e-256) {
tmp = Math.sqrt(((d / (h / d)) / l));
} else {
tmp = d * Math.sqrt(((1.0 / h) / l));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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.2e-256: tmp = math.sqrt(((d / (h / d)) / l)) else: tmp = d * math.sqrt(((1.0 / h) / l)) return tmp
M_m = abs(M) D_m = abs(D) 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.2e-256) tmp = sqrt(Float64(Float64(d / Float64(h / d)) / l)); else tmp = Float64(d * sqrt(Float64(Float64(1.0 / h) / l))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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.2e-256)
tmp = sqrt(((d / (h / d)) / l));
else
tmp = d * sqrt(((1.0 / h) / l));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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.2e-256], N[Sqrt[N[(N[(d / N[(h / d), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision], N[(d * N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\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.2 \cdot 10^{-256}:\\
\;\;\;\;\sqrt{\frac{\frac{d}{\frac{h}{d}}}{\ell}}\\
\mathbf{else}:\\
\;\;\;\;d \cdot \sqrt{\frac{\frac{1}{h}}{\ell}}\\
\end{array}
\end{array}
if l < -9.199999999999999e-256Initial program 62.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified54.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f646.1%
Simplified6.1%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f646.1%
Applied egg-rr6.1%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
sqrt-lowering-sqrt.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f6428.6%
Applied egg-rr28.6%
if -9.199999999999999e-256 < l Initial program 68.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.4%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6443.4%
Simplified43.4%
M_m = (fabs.f64 M) D_m = (fabs.f64 D) 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 -8e-256) (sqrt (/ (/ d (/ h d)) l)) (/ d (sqrt (* l h)))))
M_m = fabs(M);
D_m = fabs(D);
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 <= -8e-256) {
tmp = sqrt(((d / (h / d)) / l));
} else {
tmp = d / sqrt((l * h));
}
return tmp;
}
M_m = abs(m)
D_m = abs(d)
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 <= (-8d-256)) then
tmp = sqrt(((d / (h / d)) / l))
else
tmp = d / sqrt((l * h))
end if
code = tmp
end function
M_m = Math.abs(M);
D_m = Math.abs(D);
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 <= -8e-256) {
tmp = Math.sqrt(((d / (h / d)) / l));
} else {
tmp = d / Math.sqrt((l * h));
}
return tmp;
}
M_m = math.fabs(M) D_m = math.fabs(D) [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 <= -8e-256: tmp = math.sqrt(((d / (h / d)) / l)) else: tmp = d / math.sqrt((l * h)) return tmp
M_m = abs(M) D_m = abs(D) 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 <= -8e-256) tmp = sqrt(Float64(Float64(d / Float64(h / d)) / l)); else tmp = Float64(d / sqrt(Float64(l * h))); end return tmp end
M_m = abs(M);
D_m = abs(D);
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 <= -8e-256)
tmp = sqrt(((d / (h / d)) / l));
else
tmp = d / sqrt((l * h));
end
tmp_2 = tmp;
end
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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, -8e-256], N[Sqrt[N[(N[(d / N[(h / d), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]], $MachinePrecision], N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
M_m = \left|M\right|
\\
D_m = \left|D\right|
\\
[d, h, l, M_m, D_m] = \mathsf{sort}([d, h, l, M_m, D_m])\\
\\
\begin{array}{l}
\mathbf{if}\;\ell \leq -8 \cdot 10^{-256}:\\
\;\;\;\;\sqrt{\frac{\frac{d}{\frac{h}{d}}}{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{d}{\sqrt{\ell \cdot h}}\\
\end{array}
\end{array}
if l < -7.99999999999999982e-256Initial program 62.8%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified54.8%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f646.1%
Simplified6.1%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f646.1%
Applied egg-rr6.1%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
rem-square-sqrtN/A
sqrt-prodN/A
sqrt-divN/A
frac-timesN/A
sqrt-lowering-sqrt.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
/-lowering-/.f6428.6%
Applied egg-rr28.6%
if -7.99999999999999982e-256 < l Initial program 68.5%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified51.4%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6443.4%
Simplified43.4%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6442.9%
Applied egg-rr42.9%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f6443.0%
Applied egg-rr43.0%
M_m = (fabs.f64 M) D_m = (fabs.f64 D) 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))))
M_m = fabs(M);
D_m = fabs(D);
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));
}
M_m = abs(m)
D_m = abs(d)
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
M_m = Math.abs(M);
D_m = Math.abs(D);
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));
}
M_m = math.fabs(M) D_m = math.fabs(D) [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))
M_m = abs(M) D_m = abs(D) 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
M_m = abs(M);
D_m = abs(D);
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
M_m = N[Abs[M], $MachinePrecision] D_m = N[Abs[D], $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}
M_m = \left|M\right|
\\
D_m = \left|D\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.9%
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
unpow1/2N/A
sqrt-lowering-sqrt.f64N/A
/-lowering-/.f64N/A
sub-negN/A
+-lowering-+.f64N/A
Simplified52.9%
Taylor expanded in d around inf
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f6426.5%
Simplified26.5%
sqrt-lowering-sqrt.f64N/A
associate-/l/N/A
/-lowering-/.f64N/A
*-lowering-*.f6426.2%
Applied egg-rr26.2%
sqrt-divN/A
metadata-evalN/A
un-div-invN/A
/-lowering-/.f64N/A
sqrt-lowering-sqrt.f64N/A
*-lowering-*.f6426.2%
Applied egg-rr26.2%
herbie shell --seed 2024144
(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)))))