
(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 19 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
(*
(sqrt (/ d h))
(+ 1.0 (/ h (/ l (* -0.125 (pow (* M_m (/ D_m d)) 2.0)))))))
(t_1 (sqrt (- d)))
(t_2 (sqrt (- l))))
(if (<= l -2.4e-206)
(*
(/ t_1 t_2)
(*
(/ t_1 (sqrt (- h)))
(+ 1.0 (* (/ h l) (* (pow (* (/ D_m 2.0) (/ M_m d)) 2.0) -0.5)))))
(if (<= l -1e-309)
(* (/ 1.0 (/ t_2 t_1)) t_0)
(* t_0 (/ (sqrt d) (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 t_0 = sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * pow((M_m * (D_m / d)), 2.0)))));
double t_1 = sqrt(-d);
double t_2 = sqrt(-l);
double tmp;
if (l <= -2.4e-206) {
tmp = (t_1 / t_2) * ((t_1 / sqrt(-h)) * (1.0 + ((h / l) * (pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5))));
} else if (l <= -1e-309) {
tmp = (1.0 / (t_2 / t_1)) * t_0;
} else {
tmp = t_0 * (sqrt(d) / 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) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = sqrt((d / h)) * (1.0d0 + (h / (l / ((-0.125d0) * ((m_m * (d_m / d)) ** 2.0d0)))))
t_1 = sqrt(-d)
t_2 = sqrt(-l)
if (l <= (-2.4d-206)) then
tmp = (t_1 / t_2) * ((t_1 / sqrt(-h)) * (1.0d0 + ((h / l) * ((((d_m / 2.0d0) * (m_m / d)) ** 2.0d0) * (-0.5d0)))))
else if (l <= (-1d-309)) then
tmp = (1.0d0 / (t_2 / t_1)) * t_0
else
tmp = t_0 * (sqrt(d) / 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 t_0 = Math.sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * Math.pow((M_m * (D_m / d)), 2.0)))));
double t_1 = Math.sqrt(-d);
double t_2 = Math.sqrt(-l);
double tmp;
if (l <= -2.4e-206) {
tmp = (t_1 / t_2) * ((t_1 / Math.sqrt(-h)) * (1.0 + ((h / l) * (Math.pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5))));
} else if (l <= -1e-309) {
tmp = (1.0 / (t_2 / t_1)) * t_0;
} else {
tmp = t_0 * (Math.sqrt(d) / 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): t_0 = math.sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * math.pow((M_m * (D_m / d)), 2.0))))) t_1 = math.sqrt(-d) t_2 = math.sqrt(-l) tmp = 0 if l <= -2.4e-206: tmp = (t_1 / t_2) * ((t_1 / math.sqrt(-h)) * (1.0 + ((h / l) * (math.pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5)))) elif l <= -1e-309: tmp = (1.0 / (t_2 / t_1)) * t_0 else: tmp = t_0 * (math.sqrt(d) / 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) t_0 = Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(l / Float64(-0.125 * (Float64(M_m * Float64(D_m / d)) ^ 2.0)))))) t_1 = sqrt(Float64(-d)) t_2 = sqrt(Float64(-l)) tmp = 0.0 if (l <= -2.4e-206) tmp = Float64(Float64(t_1 / t_2) * Float64(Float64(t_1 / sqrt(Float64(-h))) * Float64(1.0 + Float64(Float64(h / l) * Float64((Float64(Float64(D_m / 2.0) * Float64(M_m / d)) ^ 2.0) * -0.5))))); elseif (l <= -1e-309) tmp = Float64(Float64(1.0 / Float64(t_2 / t_1)) * t_0); else tmp = Float64(t_0 * Float64(sqrt(d) / 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)
t_0 = sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * ((M_m * (D_m / d)) ^ 2.0)))));
t_1 = sqrt(-d);
t_2 = sqrt(-l);
tmp = 0.0;
if (l <= -2.4e-206)
tmp = (t_1 / t_2) * ((t_1 / sqrt(-h)) * (1.0 + ((h / l) * ((((D_m / 2.0) * (M_m / d)) ^ 2.0) * -0.5))));
elseif (l <= -1e-309)
tmp = (1.0 / (t_2 / t_1)) * t_0;
else
tmp = t_0 * (sqrt(d) / 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_] := Block[{t$95$0 = N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(l / N[(-0.125 * N[Power[N[(M$95$m * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[(-d)], $MachinePrecision]}, Block[{t$95$2 = N[Sqrt[(-l)], $MachinePrecision]}, If[LessEqual[l, -2.4e-206], N[(N[(t$95$1 / t$95$2), $MachinePrecision] * N[(N[(t$95$1 / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(N[(h / l), $MachinePrecision] * N[(N[Power[N[(N[(D$95$m / 2.0), $MachinePrecision] * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * -0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[l, -1e-309], N[(N[(1.0 / N[(t$95$2 / t$95$1), $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision], N[(t$95$0 * N[(N[Sqrt[d], $MachinePrecision] / N[Sqrt[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}
t_0 := \sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{\frac{\ell}{-0.125 \cdot {\left(M_m \cdot \frac{D_m}{d}\right)}^{2}}}\right)\\
t_1 := \sqrt{-d}\\
t_2 := \sqrt{-\ell}\\
\mathbf{if}\;\ell \leq -2.4 \cdot 10^{-206}:\\
\;\;\;\;\frac{t_1}{t_2} \cdot \left(\frac{t_1}{\sqrt{-h}} \cdot \left(1 + \frac{h}{\ell} \cdot \left({\left(\frac{D_m}{2} \cdot \frac{M_m}{d}\right)}^{2} \cdot -0.5\right)\right)\right)\\
\mathbf{elif}\;\ell \leq -1 \cdot 10^{-309}:\\
\;\;\;\;\frac{1}{\frac{t_2}{t_1}} \cdot t_0\\
\mathbf{else}:\\
\;\;\;\;t_0 \cdot \frac{\sqrt{d}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if l < -2.4e-206Initial program 67.4%
Simplified68.9%
frac-2neg68.9%
sqrt-div73.5%
Applied egg-rr73.5%
frac-2neg73.5%
sqrt-div86.0%
Applied egg-rr86.0%
if -2.4e-206 < l < -1.000000000000002e-309Initial program 64.1%
Simplified64.0%
Applied egg-rr70.0%
clear-num70.0%
sqrt-div74.1%
metadata-eval74.1%
Applied egg-rr74.1%
frac-2neg74.1%
sqrt-div92.1%
Applied egg-rr92.1%
if -1.000000000000002e-309 < l Initial program 69.7%
Simplified68.3%
Applied egg-rr71.6%
sqrt-div81.8%
div-inv81.9%
Applied egg-rr81.9%
associate-*r/81.8%
*-rgt-identity81.8%
Simplified81.8%
Final simplification84.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
(let* ((t_0
(*
(* (pow (/ d h) 0.5) (pow (/ d l) 0.5))
(- 1.0 (* (/ h l) (* 0.5 (pow (/ (* D_m M_m) (* d 2.0)) 2.0))))))
(t_1 (/ M_m (/ d D_m))))
(if (<= t_0 (- INFINITY))
(*
(/ 1.0 (sqrt (/ l d)))
(* (sqrt (/ d h)) (+ 1.0 (/ h (* -8.0 (* (/ 1.0 t_1) (/ l t_1)))))))
(if (<= t_0 2e+190)
t_0
(if (<= t_0 INFINITY)
(fabs
(*
(/ d (sqrt (* l h)))
(fma h (* (pow (* M_m (/ D_m d)) 2.0) (/ 0.125 l)) 1.0)))
(/
(/
(/ (* (sqrt h) (* -0.125 (pow (* D_m M_m) 2.0))) (pow l 0.75))
(pow l 0.75))
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 = (pow((d / h), 0.5) * pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * pow(((D_m * M_m) / (d * 2.0)), 2.0))));
double t_1 = M_m / (d / D_m);
double tmp;
if (t_0 <= -((double) INFINITY)) {
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
} else if (t_0 <= 2e+190) {
tmp = t_0;
} else if (t_0 <= ((double) INFINITY)) {
tmp = fabs(((d / sqrt((l * h))) * fma(h, (pow((M_m * (D_m / d)), 2.0) * (0.125 / l)), 1.0)));
} else {
tmp = (((sqrt(h) * (-0.125 * pow((D_m * M_m), 2.0))) / pow(l, 0.75)) / pow(l, 0.75)) / 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(Float64((Float64(d / h) ^ 0.5) * (Float64(d / l) ^ 0.5)) * Float64(1.0 - Float64(Float64(h / l) * Float64(0.5 * (Float64(Float64(D_m * M_m) / Float64(d * 2.0)) ^ 2.0))))) t_1 = Float64(M_m / Float64(d / D_m)) tmp = 0.0 if (t_0 <= Float64(-Inf)) tmp = Float64(Float64(1.0 / sqrt(Float64(l / d))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(-8.0 * Float64(Float64(1.0 / t_1) * Float64(l / t_1))))))); elseif (t_0 <= 2e+190) tmp = t_0; elseif (t_0 <= Inf) tmp = abs(Float64(Float64(d / sqrt(Float64(l * h))) * fma(h, Float64((Float64(M_m * Float64(D_m / d)) ^ 2.0) * Float64(0.125 / l)), 1.0))); else tmp = Float64(Float64(Float64(Float64(sqrt(h) * Float64(-0.125 * (Float64(D_m * M_m) ^ 2.0))) / (l ^ 0.75)) / (l ^ 0.75)) / d); end return 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[(N[Power[N[(d / h), $MachinePrecision], 0.5], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(h / l), $MachinePrecision] * N[(0.5 * N[Power[N[(N[(D$95$m * M$95$m), $MachinePrecision] / N[(d * 2.0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(M$95$m / N[(d / D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, (-Infinity)], N[(N[(1.0 / N[Sqrt[N[(l / d), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(-8.0 * N[(N[(1.0 / t$95$1), $MachinePrecision] * N[(l / t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 2e+190], t$95$0, If[LessEqual[t$95$0, Infinity], N[Abs[N[(N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(h * N[(N[Power[N[(M$95$m * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * N[(0.125 / l), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[(N[(N[(N[(N[Sqrt[h], $MachinePrecision] * N[(-0.125 * N[Power[N[(D$95$m * M$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / d), $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 := \left({\left(\frac{d}{h}\right)}^{0.5} \cdot {\left(\frac{d}{\ell}\right)}^{0.5}\right) \cdot \left(1 - \frac{h}{\ell} \cdot \left(0.5 \cdot {\left(\frac{D_m \cdot M_m}{d \cdot 2}\right)}^{2}\right)\right)\\
t_1 := \frac{M_m}{\frac{d}{D_m}}\\
\mathbf{if}\;t_0 \leq -\infty:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d}}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{-8 \cdot \left(\frac{1}{t_1} \cdot \frac{\ell}{t_1}\right)}\right)\right)\\
\mathbf{elif}\;t_0 \leq 2 \cdot 10^{+190}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;t_0 \leq \infty:\\
\;\;\;\;\left|\frac{d}{\sqrt{\ell \cdot h}} \cdot \mathsf{fma}\left(h, {\left(M_m \cdot \frac{D_m}{d}\right)}^{2} \cdot \frac{0.125}{\ell}, 1\right)\right|\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{h} \cdot \left(-0.125 \cdot {\left(D_m \cdot M_m\right)}^{2}\right)}{{\ell}^{0.75}}}{{\ell}^{0.75}}}{d}\\
\end{array}
\end{array}
if (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < -inf.0Initial program 69.1%
Simplified74.0%
Applied egg-rr76.9%
clear-num76.9%
sqrt-div77.6%
metadata-eval77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
times-frac77.6%
metadata-eval77.6%
associate-*r/74.4%
associate-*l/77.6%
*-commutative77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
unpow277.6%
times-frac84.5%
associate-*r/79.6%
*-commutative79.6%
associate-/l*82.8%
associate-*r/79.6%
*-commutative79.6%
associate-/l*84.4%
Applied egg-rr84.4%
if -inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < 2.0000000000000001e190Initial program 90.8%
if 2.0000000000000001e190 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < +inf.0Initial program 64.4%
Simplified64.4%
Applied egg-rr64.4%
associate-/r/64.4%
associate-*r/64.4%
*-commutative64.4%
associate-*r/64.4%
Simplified64.4%
Applied egg-rr49.2%
unpow249.2%
rem-sqrt-square97.4%
+-commutative97.4%
fma-def97.4%
associate-/r/97.4%
*-commutative97.4%
associate-*r/97.4%
associate-*l/97.4%
*-commutative97.4%
Simplified97.4%
if +inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) Initial program 0.0%
Simplified0.0%
Taylor expanded in d around 0 12.9%
associate-*r*12.9%
*-commutative12.9%
*-commutative12.9%
unpow212.9%
unpow212.9%
swap-sqr15.7%
unpow215.7%
*-commutative15.7%
Simplified15.7%
associate-*r/15.7%
associate-*r/16.2%
sqrt-div13.1%
sqrt-pow123.4%
metadata-eval23.4%
*-commutative23.4%
Applied egg-rr23.4%
associate-*l/28.9%
sqr-pow28.8%
associate-/r*39.5%
*-commutative39.5%
metadata-eval39.5%
metadata-eval39.5%
Applied egg-rr39.5%
Final simplification82.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
(let* ((t_0
(*
(* (pow (/ d h) 0.5) (pow (/ d l) 0.5))
(- 1.0 (* (/ h l) (* 0.5 (pow (/ (* D_m M_m) (* d 2.0)) 2.0))))))
(t_1 (/ M_m (/ d D_m))))
(if (<= t_0 (- INFINITY))
(*
(/ 1.0 (sqrt (/ l d)))
(* (sqrt (/ d h)) (+ 1.0 (/ h (* -8.0 (* (/ 1.0 t_1) (/ l t_1)))))))
(if (<= t_0 INFINITY)
t_0
(/
(/
(/ (* (sqrt h) (* -0.125 (pow (* D_m M_m) 2.0))) (pow l 0.75))
(pow l 0.75))
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 = (pow((d / h), 0.5) * pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * pow(((D_m * M_m) / (d * 2.0)), 2.0))));
double t_1 = M_m / (d / D_m);
double tmp;
if (t_0 <= -((double) INFINITY)) {
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
} else if (t_0 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = (((sqrt(h) * (-0.125 * pow((D_m * M_m), 2.0))) / pow(l, 0.75)) / pow(l, 0.75)) / d;
}
return tmp;
}
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.pow((d / h), 0.5) * Math.pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * Math.pow(((D_m * M_m) / (d * 2.0)), 2.0))));
double t_1 = M_m / (d / D_m);
double tmp;
if (t_0 <= -Double.POSITIVE_INFINITY) {
tmp = (1.0 / Math.sqrt((l / d))) * (Math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
} else if (t_0 <= Double.POSITIVE_INFINITY) {
tmp = t_0;
} else {
tmp = (((Math.sqrt(h) * (-0.125 * Math.pow((D_m * M_m), 2.0))) / Math.pow(l, 0.75)) / Math.pow(l, 0.75)) / 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.pow((d / h), 0.5) * math.pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * math.pow(((D_m * M_m) / (d * 2.0)), 2.0)))) t_1 = M_m / (d / D_m) tmp = 0 if t_0 <= -math.inf: tmp = (1.0 / math.sqrt((l / d))) * (math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1)))))) elif t_0 <= math.inf: tmp = t_0 else: tmp = (((math.sqrt(h) * (-0.125 * math.pow((D_m * M_m), 2.0))) / math.pow(l, 0.75)) / math.pow(l, 0.75)) / 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(Float64((Float64(d / h) ^ 0.5) * (Float64(d / l) ^ 0.5)) * Float64(1.0 - Float64(Float64(h / l) * Float64(0.5 * (Float64(Float64(D_m * M_m) / Float64(d * 2.0)) ^ 2.0))))) t_1 = Float64(M_m / Float64(d / D_m)) tmp = 0.0 if (t_0 <= Float64(-Inf)) tmp = Float64(Float64(1.0 / sqrt(Float64(l / d))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(-8.0 * Float64(Float64(1.0 / t_1) * Float64(l / t_1))))))); elseif (t_0 <= Inf) tmp = t_0; else tmp = Float64(Float64(Float64(Float64(sqrt(h) * Float64(-0.125 * (Float64(D_m * M_m) ^ 2.0))) / (l ^ 0.75)) / (l ^ 0.75)) / 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 = (((d / h) ^ 0.5) * ((d / l) ^ 0.5)) * (1.0 - ((h / l) * (0.5 * (((D_m * M_m) / (d * 2.0)) ^ 2.0))));
t_1 = M_m / (d / D_m);
tmp = 0.0;
if (t_0 <= -Inf)
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
elseif (t_0 <= Inf)
tmp = t_0;
else
tmp = (((sqrt(h) * (-0.125 * ((D_m * M_m) ^ 2.0))) / (l ^ 0.75)) / (l ^ 0.75)) / 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[(N[(N[Power[N[(d / h), $MachinePrecision], 0.5], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(h / l), $MachinePrecision] * N[(0.5 * N[Power[N[(N[(D$95$m * M$95$m), $MachinePrecision] / N[(d * 2.0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(M$95$m / N[(d / D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, (-Infinity)], N[(N[(1.0 / N[Sqrt[N[(l / d), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(-8.0 * N[(N[(1.0 / t$95$1), $MachinePrecision] * N[(l / t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, Infinity], t$95$0, N[(N[(N[(N[(N[Sqrt[h], $MachinePrecision] * N[(-0.125 * N[Power[N[(D$95$m * M$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / d), $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 := \left({\left(\frac{d}{h}\right)}^{0.5} \cdot {\left(\frac{d}{\ell}\right)}^{0.5}\right) \cdot \left(1 - \frac{h}{\ell} \cdot \left(0.5 \cdot {\left(\frac{D_m \cdot M_m}{d \cdot 2}\right)}^{2}\right)\right)\\
t_1 := \frac{M_m}{\frac{d}{D_m}}\\
\mathbf{if}\;t_0 \leq -\infty:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d}}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{-8 \cdot \left(\frac{1}{t_1} \cdot \frac{\ell}{t_1}\right)}\right)\right)\\
\mathbf{elif}\;t_0 \leq \infty:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{h} \cdot \left(-0.125 \cdot {\left(D_m \cdot M_m\right)}^{2}\right)}{{\ell}^{0.75}}}{{\ell}^{0.75}}}{d}\\
\end{array}
\end{array}
if (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < -inf.0Initial program 69.1%
Simplified74.0%
Applied egg-rr76.9%
clear-num76.9%
sqrt-div77.6%
metadata-eval77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
times-frac77.6%
metadata-eval77.6%
associate-*r/74.4%
associate-*l/77.6%
*-commutative77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
unpow277.6%
times-frac84.5%
associate-*r/79.6%
*-commutative79.6%
associate-/l*82.8%
associate-*r/79.6%
*-commutative79.6%
associate-/l*84.4%
Applied egg-rr84.4%
if -inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < +inf.0Initial program 84.7%
if +inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) Initial program 0.0%
Simplified0.0%
Taylor expanded in d around 0 12.9%
associate-*r*12.9%
*-commutative12.9%
*-commutative12.9%
unpow212.9%
unpow212.9%
swap-sqr15.7%
unpow215.7%
*-commutative15.7%
Simplified15.7%
associate-*r/15.7%
associate-*r/16.2%
sqrt-div13.1%
sqrt-pow123.4%
metadata-eval23.4%
*-commutative23.4%
Applied egg-rr23.4%
associate-*l/28.9%
sqr-pow28.8%
associate-/r*39.5%
*-commutative39.5%
metadata-eval39.5%
metadata-eval39.5%
Applied egg-rr39.5%
Final simplification77.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
(*
(* (pow (/ d h) 0.5) (pow (/ d l) 0.5))
(- 1.0 (* (/ h l) (* 0.5 (pow (/ (* D_m M_m) (* d 2.0)) 2.0))))))
(t_1 (/ M_m (/ d D_m))))
(if (<= t_0 (- INFINITY))
(*
(/ 1.0 (sqrt (/ l d)))
(* (sqrt (/ d h)) (+ 1.0 (/ h (* -8.0 (* (/ 1.0 t_1) (/ l t_1)))))))
(if (<= t_0 INFINITY)
t_0
(/ (* (sqrt h) (* -0.125 (pow (* D_m M_m) 2.0))) (* d (pow l 1.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 = (pow((d / h), 0.5) * pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * pow(((D_m * M_m) / (d * 2.0)), 2.0))));
double t_1 = M_m / (d / D_m);
double tmp;
if (t_0 <= -((double) INFINITY)) {
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
} else if (t_0 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = (sqrt(h) * (-0.125 * pow((D_m * M_m), 2.0))) / (d * pow(l, 1.5));
}
return tmp;
}
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.pow((d / h), 0.5) * Math.pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * Math.pow(((D_m * M_m) / (d * 2.0)), 2.0))));
double t_1 = M_m / (d / D_m);
double tmp;
if (t_0 <= -Double.POSITIVE_INFINITY) {
tmp = (1.0 / Math.sqrt((l / d))) * (Math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
} else if (t_0 <= Double.POSITIVE_INFINITY) {
tmp = t_0;
} else {
tmp = (Math.sqrt(h) * (-0.125 * Math.pow((D_m * M_m), 2.0))) / (d * Math.pow(l, 1.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 = (math.pow((d / h), 0.5) * math.pow((d / l), 0.5)) * (1.0 - ((h / l) * (0.5 * math.pow(((D_m * M_m) / (d * 2.0)), 2.0)))) t_1 = M_m / (d / D_m) tmp = 0 if t_0 <= -math.inf: tmp = (1.0 / math.sqrt((l / d))) * (math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1)))))) elif t_0 <= math.inf: tmp = t_0 else: tmp = (math.sqrt(h) * (-0.125 * math.pow((D_m * M_m), 2.0))) / (d * math.pow(l, 1.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(Float64((Float64(d / h) ^ 0.5) * (Float64(d / l) ^ 0.5)) * Float64(1.0 - Float64(Float64(h / l) * Float64(0.5 * (Float64(Float64(D_m * M_m) / Float64(d * 2.0)) ^ 2.0))))) t_1 = Float64(M_m / Float64(d / D_m)) tmp = 0.0 if (t_0 <= Float64(-Inf)) tmp = Float64(Float64(1.0 / sqrt(Float64(l / d))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(-8.0 * Float64(Float64(1.0 / t_1) * Float64(l / t_1))))))); elseif (t_0 <= Inf) tmp = t_0; else tmp = Float64(Float64(sqrt(h) * Float64(-0.125 * (Float64(D_m * M_m) ^ 2.0))) / Float64(d * (l ^ 1.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 = (((d / h) ^ 0.5) * ((d / l) ^ 0.5)) * (1.0 - ((h / l) * (0.5 * (((D_m * M_m) / (d * 2.0)) ^ 2.0))));
t_1 = M_m / (d / D_m);
tmp = 0.0;
if (t_0 <= -Inf)
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_1) * (l / t_1))))));
elseif (t_0 <= Inf)
tmp = t_0;
else
tmp = (sqrt(h) * (-0.125 * ((D_m * M_m) ^ 2.0))) / (d * (l ^ 1.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[(N[(N[Power[N[(d / h), $MachinePrecision], 0.5], $MachinePrecision] * N[Power[N[(d / l), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(N[(h / l), $MachinePrecision] * N[(0.5 * N[Power[N[(N[(D$95$m * M$95$m), $MachinePrecision] / N[(d * 2.0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(M$95$m / N[(d / D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, (-Infinity)], N[(N[(1.0 / N[Sqrt[N[(l / d), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(-8.0 * N[(N[(1.0 / t$95$1), $MachinePrecision] * N[(l / t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, Infinity], t$95$0, N[(N[(N[Sqrt[h], $MachinePrecision] * N[(-0.125 * N[Power[N[(D$95$m * M$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * N[Power[l, 1.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 := \left({\left(\frac{d}{h}\right)}^{0.5} \cdot {\left(\frac{d}{\ell}\right)}^{0.5}\right) \cdot \left(1 - \frac{h}{\ell} \cdot \left(0.5 \cdot {\left(\frac{D_m \cdot M_m}{d \cdot 2}\right)}^{2}\right)\right)\\
t_1 := \frac{M_m}{\frac{d}{D_m}}\\
\mathbf{if}\;t_0 \leq -\infty:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d}}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{-8 \cdot \left(\frac{1}{t_1} \cdot \frac{\ell}{t_1}\right)}\right)\right)\\
\mathbf{elif}\;t_0 \leq \infty:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{h} \cdot \left(-0.125 \cdot {\left(D_m \cdot M_m\right)}^{2}\right)}{d \cdot {\ell}^{1.5}}\\
\end{array}
\end{array}
if (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < -inf.0Initial program 69.1%
Simplified74.0%
Applied egg-rr76.9%
clear-num76.9%
sqrt-div77.6%
metadata-eval77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
times-frac77.6%
metadata-eval77.6%
associate-*r/74.4%
associate-*l/77.6%
*-commutative77.6%
Applied egg-rr77.6%
*-un-lft-identity77.6%
unpow277.6%
times-frac84.5%
associate-*r/79.6%
*-commutative79.6%
associate-/l*82.8%
associate-*r/79.6%
*-commutative79.6%
associate-/l*84.4%
Applied egg-rr84.4%
if -inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) < +inf.0Initial program 84.7%
if +inf.0 < (*.f64 (*.f64 (pow.f64 (/.f64 d h) (/.f64 1 2)) (pow.f64 (/.f64 d l) (/.f64 1 2))) (-.f64 1 (*.f64 (*.f64 (/.f64 1 2) (pow.f64 (/.f64 (*.f64 M D) (*.f64 2 d)) 2)) (/.f64 h l)))) Initial program 0.0%
Simplified0.0%
Taylor expanded in d around 0 12.9%
associate-*r*12.9%
*-commutative12.9%
*-commutative12.9%
unpow212.9%
unpow212.9%
swap-sqr15.7%
unpow215.7%
*-commutative15.7%
Simplified15.7%
*-commutative15.7%
associate-*r/15.7%
sqrt-div12.9%
frac-times13.1%
*-commutative13.1%
sqrt-pow128.7%
metadata-eval28.7%
Applied egg-rr28.7%
Final simplification76.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
(let* ((t_0 (+ 1.0 (/ h (/ l (* -0.125 (pow (* M_m (/ D_m d)) 2.0))))))
(t_1 (* (sqrt (/ d h)) t_0))
(t_2 (sqrt (- d))))
(if (<= h -8e-114)
(* (/ t_2 (sqrt (- l))) t_1)
(if (<= h -1e-309)
(* (sqrt (/ d l)) (* (/ t_2 (sqrt (- h))) t_0))
(* t_1 (/ (sqrt d) (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 t_0 = 1.0 + (h / (l / (-0.125 * pow((M_m * (D_m / d)), 2.0))));
double t_1 = sqrt((d / h)) * t_0;
double t_2 = sqrt(-d);
double tmp;
if (h <= -8e-114) {
tmp = (t_2 / sqrt(-l)) * t_1;
} else if (h <= -1e-309) {
tmp = sqrt((d / l)) * ((t_2 / sqrt(-h)) * t_0);
} else {
tmp = t_1 * (sqrt(d) / 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) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = 1.0d0 + (h / (l / ((-0.125d0) * ((m_m * (d_m / d)) ** 2.0d0))))
t_1 = sqrt((d / h)) * t_0
t_2 = sqrt(-d)
if (h <= (-8d-114)) then
tmp = (t_2 / sqrt(-l)) * t_1
else if (h <= (-1d-309)) then
tmp = sqrt((d / l)) * ((t_2 / sqrt(-h)) * t_0)
else
tmp = t_1 * (sqrt(d) / 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 t_0 = 1.0 + (h / (l / (-0.125 * Math.pow((M_m * (D_m / d)), 2.0))));
double t_1 = Math.sqrt((d / h)) * t_0;
double t_2 = Math.sqrt(-d);
double tmp;
if (h <= -8e-114) {
tmp = (t_2 / Math.sqrt(-l)) * t_1;
} else if (h <= -1e-309) {
tmp = Math.sqrt((d / l)) * ((t_2 / Math.sqrt(-h)) * t_0);
} else {
tmp = t_1 * (Math.sqrt(d) / 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): t_0 = 1.0 + (h / (l / (-0.125 * math.pow((M_m * (D_m / d)), 2.0)))) t_1 = math.sqrt((d / h)) * t_0 t_2 = math.sqrt(-d) tmp = 0 if h <= -8e-114: tmp = (t_2 / math.sqrt(-l)) * t_1 elif h <= -1e-309: tmp = math.sqrt((d / l)) * ((t_2 / math.sqrt(-h)) * t_0) else: tmp = t_1 * (math.sqrt(d) / 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) t_0 = Float64(1.0 + Float64(h / Float64(l / Float64(-0.125 * (Float64(M_m * Float64(D_m / d)) ^ 2.0))))) t_1 = Float64(sqrt(Float64(d / h)) * t_0) t_2 = sqrt(Float64(-d)) tmp = 0.0 if (h <= -8e-114) tmp = Float64(Float64(t_2 / sqrt(Float64(-l))) * t_1); elseif (h <= -1e-309) tmp = Float64(sqrt(Float64(d / l)) * Float64(Float64(t_2 / sqrt(Float64(-h))) * t_0)); else tmp = Float64(t_1 * Float64(sqrt(d) / 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)
t_0 = 1.0 + (h / (l / (-0.125 * ((M_m * (D_m / d)) ^ 2.0))));
t_1 = sqrt((d / h)) * t_0;
t_2 = sqrt(-d);
tmp = 0.0;
if (h <= -8e-114)
tmp = (t_2 / sqrt(-l)) * t_1;
elseif (h <= -1e-309)
tmp = sqrt((d / l)) * ((t_2 / sqrt(-h)) * t_0);
else
tmp = t_1 * (sqrt(d) / 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_] := Block[{t$95$0 = N[(1.0 + N[(h / N[(l / N[(-0.125 * N[Power[N[(M$95$m * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[Sqrt[(-d)], $MachinePrecision]}, If[LessEqual[h, -8e-114], N[(N[(t$95$2 / N[Sqrt[(-l)], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision], If[LessEqual[h, -1e-309], N[(N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision] * N[(N[(t$95$2 / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], N[(t$95$1 * N[(N[Sqrt[d], $MachinePrecision] / N[Sqrt[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}
t_0 := 1 + \frac{h}{\frac{\ell}{-0.125 \cdot {\left(M_m \cdot \frac{D_m}{d}\right)}^{2}}}\\
t_1 := \sqrt{\frac{d}{h}} \cdot t_0\\
t_2 := \sqrt{-d}\\
\mathbf{if}\;h \leq -8 \cdot 10^{-114}:\\
\;\;\;\;\frac{t_2}{\sqrt{-\ell}} \cdot t_1\\
\mathbf{elif}\;h \leq -1 \cdot 10^{-309}:\\
\;\;\;\;\sqrt{\frac{d}{\ell}} \cdot \left(\frac{t_2}{\sqrt{-h}} \cdot t_0\right)\\
\mathbf{else}:\\
\;\;\;\;t_1 \cdot \frac{\sqrt{d}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if h < -8.0000000000000004e-114Initial program 65.9%
Simplified67.7%
Applied egg-rr69.8%
frac-2neg67.7%
sqrt-div74.1%
Applied egg-rr79.6%
if -8.0000000000000004e-114 < h < -1.000000000000002e-309Initial program 69.6%
Simplified69.6%
Applied egg-rr67.2%
frac-2neg69.7%
sqrt-div88.9%
Applied egg-rr86.7%
if -1.000000000000002e-309 < h Initial program 69.7%
Simplified68.3%
Applied egg-rr71.6%
sqrt-div81.8%
div-inv81.9%
Applied egg-rr81.9%
associate-*r/81.8%
*-rgt-identity81.8%
Simplified81.8%
Final simplification81.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
(if (<= d -2e-310)
(*
(*
(/ (sqrt (- d)) (sqrt (- h)))
(+ 1.0 (* (/ h l) (* (pow (* (/ D_m 2.0) (/ M_m d)) 2.0) -0.5))))
(sqrt (/ d l)))
(if (<= d 1.36e-209)
(/
(/
(/ (* (sqrt h) (* -0.125 (pow (* D_m M_m) 2.0))) (pow l 0.75))
(pow l 0.75))
d)
(*
(*
(sqrt (/ d h))
(+ 1.0 (/ h (/ l (* -0.125 (pow (* M_m (/ D_m d)) 2.0))))))
(/ (sqrt d) (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 (d <= -2e-310) {
tmp = ((sqrt(-d) / sqrt(-h)) * (1.0 + ((h / l) * (pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5)))) * sqrt((d / l));
} else if (d <= 1.36e-209) {
tmp = (((sqrt(h) * (-0.125 * pow((D_m * M_m), 2.0))) / pow(l, 0.75)) / pow(l, 0.75)) / d;
} else {
tmp = (sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * pow((M_m * (D_m / d)), 2.0)))))) * (sqrt(d) / 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 (d <= (-2d-310)) then
tmp = ((sqrt(-d) / sqrt(-h)) * (1.0d0 + ((h / l) * ((((d_m / 2.0d0) * (m_m / d)) ** 2.0d0) * (-0.5d0))))) * sqrt((d / l))
else if (d <= 1.36d-209) then
tmp = (((sqrt(h) * ((-0.125d0) * ((d_m * m_m) ** 2.0d0))) / (l ** 0.75d0)) / (l ** 0.75d0)) / d
else
tmp = (sqrt((d / h)) * (1.0d0 + (h / (l / ((-0.125d0) * ((m_m * (d_m / d)) ** 2.0d0)))))) * (sqrt(d) / 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 (d <= -2e-310) {
tmp = ((Math.sqrt(-d) / Math.sqrt(-h)) * (1.0 + ((h / l) * (Math.pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5)))) * Math.sqrt((d / l));
} else if (d <= 1.36e-209) {
tmp = (((Math.sqrt(h) * (-0.125 * Math.pow((D_m * M_m), 2.0))) / Math.pow(l, 0.75)) / Math.pow(l, 0.75)) / d;
} else {
tmp = (Math.sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * Math.pow((M_m * (D_m / d)), 2.0)))))) * (Math.sqrt(d) / 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 d <= -2e-310: tmp = ((math.sqrt(-d) / math.sqrt(-h)) * (1.0 + ((h / l) * (math.pow(((D_m / 2.0) * (M_m / d)), 2.0) * -0.5)))) * math.sqrt((d / l)) elif d <= 1.36e-209: tmp = (((math.sqrt(h) * (-0.125 * math.pow((D_m * M_m), 2.0))) / math.pow(l, 0.75)) / math.pow(l, 0.75)) / d else: tmp = (math.sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * math.pow((M_m * (D_m / d)), 2.0)))))) * (math.sqrt(d) / 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 (d <= -2e-310) tmp = Float64(Float64(Float64(sqrt(Float64(-d)) / sqrt(Float64(-h))) * Float64(1.0 + Float64(Float64(h / l) * Float64((Float64(Float64(D_m / 2.0) * Float64(M_m / d)) ^ 2.0) * -0.5)))) * sqrt(Float64(d / l))); elseif (d <= 1.36e-209) tmp = Float64(Float64(Float64(Float64(sqrt(h) * Float64(-0.125 * (Float64(D_m * M_m) ^ 2.0))) / (l ^ 0.75)) / (l ^ 0.75)) / d); else tmp = Float64(Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(l / Float64(-0.125 * (Float64(M_m * Float64(D_m / d)) ^ 2.0)))))) * Float64(sqrt(d) / 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 (d <= -2e-310)
tmp = ((sqrt(-d) / sqrt(-h)) * (1.0 + ((h / l) * ((((D_m / 2.0) * (M_m / d)) ^ 2.0) * -0.5)))) * sqrt((d / l));
elseif (d <= 1.36e-209)
tmp = (((sqrt(h) * (-0.125 * ((D_m * M_m) ^ 2.0))) / (l ^ 0.75)) / (l ^ 0.75)) / d;
else
tmp = (sqrt((d / h)) * (1.0 + (h / (l / (-0.125 * ((M_m * (D_m / d)) ^ 2.0)))))) * (sqrt(d) / 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[d, -2e-310], N[(N[(N[(N[Sqrt[(-d)], $MachinePrecision] / N[Sqrt[(-h)], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(N[(h / l), $MachinePrecision] * N[(N[Power[N[(N[(D$95$m / 2.0), $MachinePrecision] * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] * -0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.36e-209], N[(N[(N[(N[(N[Sqrt[h], $MachinePrecision] * N[(-0.125 * N[Power[N[(D$95$m * M$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / N[Power[l, 0.75], $MachinePrecision]), $MachinePrecision] / d), $MachinePrecision], N[(N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(l / N[(-0.125 * N[Power[N[(M$95$m * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[d], $MachinePrecision] / N[Sqrt[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}\;d \leq -2 \cdot 10^{-310}:\\
\;\;\;\;\left(\frac{\sqrt{-d}}{\sqrt{-h}} \cdot \left(1 + \frac{h}{\ell} \cdot \left({\left(\frac{D_m}{2} \cdot \frac{M_m}{d}\right)}^{2} \cdot -0.5\right)\right)\right) \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;d \leq 1.36 \cdot 10^{-209}:\\
\;\;\;\;\frac{\frac{\frac{\sqrt{h} \cdot \left(-0.125 \cdot {\left(D_m \cdot M_m\right)}^{2}\right)}{{\ell}^{0.75}}}{{\ell}^{0.75}}}{d}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{\frac{\ell}{-0.125 \cdot {\left(M_m \cdot \frac{D_m}{d}\right)}^{2}}}\right)\right) \cdot \frac{\sqrt{d}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if d < -1.999999999999994e-310Initial program 66.9%
Simplified68.2%
frac-2neg72.9%
sqrt-div83.5%
Applied egg-rr77.1%
if -1.999999999999994e-310 < d < 1.3599999999999999e-209Initial program 40.4%
Simplified40.4%
Taylor expanded in d around 0 44.9%
associate-*r*44.9%
*-commutative44.9%
*-commutative44.9%
unpow244.9%
unpow244.9%
swap-sqr58.7%
unpow258.7%
*-commutative58.7%
Simplified58.7%
associate-*r/58.7%
associate-*r/58.8%
sqrt-div58.8%
sqrt-pow172.2%
metadata-eval72.2%
*-commutative72.2%
Applied egg-rr72.2%
associate-*l/76.8%
sqr-pow76.7%
associate-/r*86.2%
*-commutative86.2%
metadata-eval86.2%
metadata-eval86.2%
Applied egg-rr86.2%
if 1.3599999999999999e-209 < d Initial program 76.2%
Simplified75.4%
Applied egg-rr78.4%
sqrt-div85.8%
div-inv85.8%
Applied egg-rr85.8%
associate-*r/85.8%
*-rgt-identity85.8%
Simplified85.8%
Final simplification81.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 D_m))))
(if (or (<= d -3.3e-307) (not (<= d 8.2e-220)))
(*
(/ 1.0 (sqrt (/ l d)))
(* (sqrt (/ d h)) (+ 1.0 (/ h (* -8.0 (* (/ 1.0 t_0) (/ l t_0)))))))
(/ (* (sqrt h) (* -0.125 (pow (* D_m M_m) 2.0))) (* d (pow l 1.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 / D_m);
double tmp;
if ((d <= -3.3e-307) || !(d <= 8.2e-220)) {
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
} else {
tmp = (sqrt(h) * (-0.125 * pow((D_m * M_m), 2.0))) / (d * pow(l, 1.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 / d_m)
if ((d <= (-3.3d-307)) .or. (.not. (d <= 8.2d-220))) then
tmp = (1.0d0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0d0 + (h / ((-8.0d0) * ((1.0d0 / t_0) * (l / t_0))))))
else
tmp = (sqrt(h) * ((-0.125d0) * ((d_m * m_m) ** 2.0d0))) / (d * (l ** 1.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 / D_m);
double tmp;
if ((d <= -3.3e-307) || !(d <= 8.2e-220)) {
tmp = (1.0 / Math.sqrt((l / d))) * (Math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
} else {
tmp = (Math.sqrt(h) * (-0.125 * Math.pow((D_m * M_m), 2.0))) / (d * Math.pow(l, 1.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 / D_m) tmp = 0 if (d <= -3.3e-307) or not (d <= 8.2e-220): tmp = (1.0 / math.sqrt((l / d))) * (math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0)))))) else: tmp = (math.sqrt(h) * (-0.125 * math.pow((D_m * M_m), 2.0))) / (d * math.pow(l, 1.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 / D_m)) tmp = 0.0 if ((d <= -3.3e-307) || !(d <= 8.2e-220)) tmp = Float64(Float64(1.0 / sqrt(Float64(l / d))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(-8.0 * Float64(Float64(1.0 / t_0) * Float64(l / t_0))))))); else tmp = Float64(Float64(sqrt(h) * Float64(-0.125 * (Float64(D_m * M_m) ^ 2.0))) / Float64(d * (l ^ 1.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 / D_m);
tmp = 0.0;
if ((d <= -3.3e-307) || ~((d <= 8.2e-220)))
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
else
tmp = (sqrt(h) * (-0.125 * ((D_m * M_m) ^ 2.0))) / (d * (l ^ 1.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 / D$95$m), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[d, -3.3e-307], N[Not[LessEqual[d, 8.2e-220]], $MachinePrecision]], N[(N[(1.0 / N[Sqrt[N[(l / d), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(-8.0 * N[(N[(1.0 / t$95$0), $MachinePrecision] * N[(l / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[Sqrt[h], $MachinePrecision] * N[(-0.125 * N[Power[N[(D$95$m * M$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(d * N[Power[l, 1.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 := \frac{M_m}{\frac{d}{D_m}}\\
\mathbf{if}\;d \leq -3.3 \cdot 10^{-307} \lor \neg \left(d \leq 8.2 \cdot 10^{-220}\right):\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d}}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{-8 \cdot \left(\frac{1}{t_0} \cdot \frac{\ell}{t_0}\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{h} \cdot \left(-0.125 \cdot {\left(D_m \cdot M_m\right)}^{2}\right)}{d \cdot {\ell}^{1.5}}\\
\end{array}
\end{array}
if d < -3.3e-307 or 8.19999999999999982e-220 < d Initial program 70.5%
Simplified71.0%
Applied egg-rr72.7%
clear-num72.3%
sqrt-div73.0%
metadata-eval73.0%
Applied egg-rr73.0%
*-un-lft-identity73.0%
times-frac73.0%
metadata-eval73.0%
associate-*r/72.2%
associate-*l/72.3%
*-commutative72.3%
Applied egg-rr72.3%
*-un-lft-identity72.3%
unpow272.3%
times-frac73.9%
associate-*r/72.8%
*-commutative72.8%
associate-/l*73.6%
associate-*r/73.5%
*-commutative73.5%
associate-/l*74.7%
Applied egg-rr74.7%
if -3.3e-307 < d < 8.19999999999999982e-220Initial program 42.5%
Simplified42.5%
Taylor expanded in d around 0 47.3%
associate-*r*47.3%
*-commutative47.3%
*-commutative47.3%
unpow247.3%
unpow247.3%
swap-sqr61.7%
unpow261.7%
*-commutative61.7%
Simplified61.7%
*-commutative61.7%
associate-*r/61.7%
sqrt-div61.5%
frac-times61.6%
*-commutative61.6%
sqrt-pow180.5%
metadata-eval80.5%
Applied egg-rr80.5%
Final simplification75.2%
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 D_m))))
(if (<= l 4e+234)
(*
(/ 1.0 (sqrt (/ l d)))
(* (sqrt (/ d h)) (+ 1.0 (/ h (* -8.0 (* (/ 1.0 t_0) (/ l t_0)))))))
(* d (/ (sqrt (/ 1.0 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 t_0 = M_m / (d / D_m);
double tmp;
if (l <= 4e+234) {
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
} else {
tmp = d * (sqrt((1.0 / 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) :: t_0
real(8) :: tmp
t_0 = m_m / (d / d_m)
if (l <= 4d+234) then
tmp = (1.0d0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0d0 + (h / ((-8.0d0) * ((1.0d0 / t_0) * (l / t_0))))))
else
tmp = d * (sqrt((1.0d0 / 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 t_0 = M_m / (d / D_m);
double tmp;
if (l <= 4e+234) {
tmp = (1.0 / Math.sqrt((l / d))) * (Math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
} else {
tmp = d * (Math.sqrt((1.0 / 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): t_0 = M_m / (d / D_m) tmp = 0 if l <= 4e+234: tmp = (1.0 / math.sqrt((l / d))) * (math.sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0)))))) else: tmp = d * (math.sqrt((1.0 / 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) t_0 = Float64(M_m / Float64(d / D_m)) tmp = 0.0 if (l <= 4e+234) tmp = Float64(Float64(1.0 / sqrt(Float64(l / d))) * Float64(sqrt(Float64(d / h)) * Float64(1.0 + Float64(h / Float64(-8.0 * Float64(Float64(1.0 / t_0) * Float64(l / t_0))))))); else tmp = Float64(d * Float64(sqrt(Float64(1.0 / 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)
t_0 = M_m / (d / D_m);
tmp = 0.0;
if (l <= 4e+234)
tmp = (1.0 / sqrt((l / d))) * (sqrt((d / h)) * (1.0 + (h / (-8.0 * ((1.0 / t_0) * (l / t_0))))));
else
tmp = d * (sqrt((1.0 / 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_] := Block[{t$95$0 = N[(M$95$m / N[(d / D$95$m), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[l, 4e+234], N[(N[(1.0 / N[Sqrt[N[(l / d), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(h / N[(-8.0 * N[(N[(1.0 / t$95$0), $MachinePrecision] * N[(l / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d * N[(N[Sqrt[N[(1.0 / h), $MachinePrecision]], $MachinePrecision] / N[Sqrt[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}
t_0 := \frac{M_m}{\frac{d}{D_m}}\\
\mathbf{if}\;\ell \leq 4 \cdot 10^{+234}:\\
\;\;\;\;\frac{1}{\sqrt{\frac{\ell}{d}}} \cdot \left(\sqrt{\frac{d}{h}} \cdot \left(1 + \frac{h}{-8 \cdot \left(\frac{1}{t_0} \cdot \frac{\ell}{t_0}\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{\sqrt{\frac{1}{h}}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if l < 4.00000000000000007e234Initial program 69.6%
Simplified70.1%
Applied egg-rr71.8%
clear-num71.4%
sqrt-div72.1%
metadata-eval72.1%
Applied egg-rr72.1%
*-un-lft-identity72.1%
times-frac72.1%
metadata-eval72.1%
associate-*r/71.3%
associate-*l/71.3%
*-commutative71.3%
Applied egg-rr71.3%
*-un-lft-identity71.3%
unpow271.3%
times-frac73.0%
associate-*r/71.8%
*-commutative71.8%
associate-/l*72.6%
associate-*r/72.6%
*-commutative72.6%
associate-/l*73.7%
Applied egg-rr73.7%
if 4.00000000000000007e234 < l Initial program 53.3%
Simplified53.2%
Taylor expanded in d around inf 46.2%
associate-/r*46.2%
sqrt-div68.8%
Applied egg-rr68.8%
Final simplification73.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 h) (pow l 1.5)) (* -0.125 (* D_m (* M_m (* D_m M_m)))))
d))
(t_1 (* (sqrt (/ d h)) (sqrt (/ d l)))))
(if (<= M_m 1.15e-75)
t_1
(if (<= M_m 1.9e-57)
t_0
(if (<= M_m 1.6e-16)
t_1
(if (<= M_m 1.55e+132)
(*
(/ d (sqrt (* l h)))
(+ 1.0 (* h (* (/ 0.125 l) (pow (* D_m (/ M_m d)) 2.0)))))
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(h) / pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
double t_1 = sqrt((d / h)) * sqrt((d / l));
double tmp;
if (M_m <= 1.15e-75) {
tmp = t_1;
} else if (M_m <= 1.9e-57) {
tmp = t_0;
} else if (M_m <= 1.6e-16) {
tmp = t_1;
} else if (M_m <= 1.55e+132) {
tmp = (d / sqrt((l * h))) * (1.0 + (h * ((0.125 / l) * pow((D_m * (M_m / d)), 2.0))));
} 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) :: t_1
real(8) :: tmp
t_0 = ((sqrt(h) / (l ** 1.5d0)) * ((-0.125d0) * (d_m * (m_m * (d_m * m_m))))) / d
t_1 = sqrt((d / h)) * sqrt((d / l))
if (m_m <= 1.15d-75) then
tmp = t_1
else if (m_m <= 1.9d-57) then
tmp = t_0
else if (m_m <= 1.6d-16) then
tmp = t_1
else if (m_m <= 1.55d+132) then
tmp = (d / sqrt((l * h))) * (1.0d0 + (h * ((0.125d0 / l) * ((d_m * (m_m / d)) ** 2.0d0))))
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(h) / Math.pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
double t_1 = Math.sqrt((d / h)) * Math.sqrt((d / l));
double tmp;
if (M_m <= 1.15e-75) {
tmp = t_1;
} else if (M_m <= 1.9e-57) {
tmp = t_0;
} else if (M_m <= 1.6e-16) {
tmp = t_1;
} else if (M_m <= 1.55e+132) {
tmp = (d / Math.sqrt((l * h))) * (1.0 + (h * ((0.125 / l) * Math.pow((D_m * (M_m / d)), 2.0))));
} 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(h) / math.pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d t_1 = math.sqrt((d / h)) * math.sqrt((d / l)) tmp = 0 if M_m <= 1.15e-75: tmp = t_1 elif M_m <= 1.9e-57: tmp = t_0 elif M_m <= 1.6e-16: tmp = t_1 elif M_m <= 1.55e+132: tmp = (d / math.sqrt((l * h))) * (1.0 + (h * ((0.125 / l) * math.pow((D_m * (M_m / d)), 2.0)))) 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(Float64(Float64(sqrt(h) / (l ^ 1.5)) * Float64(-0.125 * Float64(D_m * Float64(M_m * Float64(D_m * M_m))))) / d) t_1 = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))) tmp = 0.0 if (M_m <= 1.15e-75) tmp = t_1; elseif (M_m <= 1.9e-57) tmp = t_0; elseif (M_m <= 1.6e-16) tmp = t_1; elseif (M_m <= 1.55e+132) tmp = Float64(Float64(d / sqrt(Float64(l * h))) * Float64(1.0 + Float64(h * Float64(Float64(0.125 / l) * (Float64(D_m * Float64(M_m / d)) ^ 2.0))))); 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(h) / (l ^ 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
t_1 = sqrt((d / h)) * sqrt((d / l));
tmp = 0.0;
if (M_m <= 1.15e-75)
tmp = t_1;
elseif (M_m <= 1.9e-57)
tmp = t_0;
elseif (M_m <= 1.6e-16)
tmp = t_1;
elseif (M_m <= 1.55e+132)
tmp = (d / sqrt((l * h))) * (1.0 + (h * ((0.125 / l) * ((D_m * (M_m / d)) ^ 2.0))));
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[(N[(N[Sqrt[h], $MachinePrecision] / N[Power[l, 1.5], $MachinePrecision]), $MachinePrecision] * N[(-0.125 * N[(D$95$m * N[(M$95$m * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / d), $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[M$95$m, 1.15e-75], t$95$1, If[LessEqual[M$95$m, 1.9e-57], t$95$0, If[LessEqual[M$95$m, 1.6e-16], t$95$1, If[LessEqual[M$95$m, 1.55e+132], N[(N[(d / N[Sqrt[N[(l * h), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(h * N[(N[(0.125 / l), $MachinePrecision] * N[Power[N[(D$95$m * N[(M$95$m / d), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $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 := \frac{\frac{\sqrt{h}}{{\ell}^{1.5}} \cdot \left(-0.125 \cdot \left(D_m \cdot \left(M_m \cdot \left(D_m \cdot M_m\right)\right)\right)\right)}{d}\\
t_1 := \sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{if}\;M_m \leq 1.15 \cdot 10^{-75}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;M_m \leq 1.9 \cdot 10^{-57}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;M_m \leq 1.6 \cdot 10^{-16}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;M_m \leq 1.55 \cdot 10^{+132}:\\
\;\;\;\;\frac{d}{\sqrt{\ell \cdot h}} \cdot \left(1 + h \cdot \left(\frac{0.125}{\ell} \cdot {\left(D_m \cdot \frac{M_m}{d}\right)}^{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t_0\\
\end{array}
\end{array}
if M < 1.15e-75 or 1.8999999999999999e-57 < M < 1.60000000000000011e-16Initial program 74.2%
Simplified75.2%
Taylor expanded in h around 0 54.5%
if 1.15e-75 < M < 1.8999999999999999e-57 or 1.5499999999999999e132 < M Initial program 48.1%
Simplified45.5%
Taylor expanded in d around 0 13.3%
associate-*r*13.3%
*-commutative13.3%
*-commutative13.3%
unpow213.3%
unpow213.3%
swap-sqr18.7%
unpow218.7%
*-commutative18.7%
Simplified18.7%
associate-*r/18.3%
associate-*r/18.5%
sqrt-div17.8%
sqrt-pow121.4%
metadata-eval21.4%
*-commutative21.4%
Applied egg-rr21.4%
unpow221.4%
associate-*r*20.5%
*-commutative20.5%
Applied egg-rr20.5%
if 1.60000000000000011e-16 < M < 1.5499999999999999e132Initial program 61.3%
Simplified63.8%
Applied egg-rr63.8%
associate-/r/64.0%
associate-*r/61.5%
*-commutative61.5%
associate-*r/61.0%
Simplified61.0%
Applied egg-rr37.9%
*-rgt-identity37.9%
distribute-lft-in37.9%
associate-/r/38.0%
Simplified38.0%
Final simplification46.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.5e-280)
(* (sqrt (/ d h)) (sqrt (/ d l)))
(if (<= d 4.4e-226)
(* (sqrt (/ h (pow l 3.0))) (* -0.125 (* (* M_m (/ D_m d)) (* D_m M_m))))
(/ (/ d (sqrt 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 tmp;
if (d <= 1.5e-280) {
tmp = sqrt((d / h)) * sqrt((d / l));
} else if (d <= 4.4e-226) {
tmp = sqrt((h / pow(l, 3.0))) * (-0.125 * ((M_m * (D_m / d)) * (D_m * M_m)));
} else {
tmp = (d / sqrt(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) :: tmp
if (d <= 1.5d-280) then
tmp = sqrt((d / h)) * sqrt((d / l))
else if (d <= 4.4d-226) then
tmp = sqrt((h / (l ** 3.0d0))) * ((-0.125d0) * ((m_m * (d_m / d)) * (d_m * m_m)))
else
tmp = (d / sqrt(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 tmp;
if (d <= 1.5e-280) {
tmp = Math.sqrt((d / h)) * Math.sqrt((d / l));
} else if (d <= 4.4e-226) {
tmp = Math.sqrt((h / Math.pow(l, 3.0))) * (-0.125 * ((M_m * (D_m / d)) * (D_m * M_m)));
} else {
tmp = (d / Math.sqrt(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): tmp = 0 if d <= 1.5e-280: tmp = math.sqrt((d / h)) * math.sqrt((d / l)) elif d <= 4.4e-226: tmp = math.sqrt((h / math.pow(l, 3.0))) * (-0.125 * ((M_m * (D_m / d)) * (D_m * M_m))) else: tmp = (d / math.sqrt(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) tmp = 0.0 if (d <= 1.5e-280) tmp = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))); elseif (d <= 4.4e-226) tmp = Float64(sqrt(Float64(h / (l ^ 3.0))) * Float64(-0.125 * Float64(Float64(M_m * Float64(D_m / d)) * Float64(D_m * M_m)))); else tmp = Float64(Float64(d / sqrt(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)
tmp = 0.0;
if (d <= 1.5e-280)
tmp = sqrt((d / h)) * sqrt((d / l));
elseif (d <= 4.4e-226)
tmp = sqrt((h / (l ^ 3.0))) * (-0.125 * ((M_m * (D_m / d)) * (D_m * M_m)));
else
tmp = (d / sqrt(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_] := If[LessEqual[d, 1.5e-280], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 4.4e-226], N[(N[Sqrt[N[(h / N[Power[l, 3.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[(-0.125 * N[(N[(M$95$m * N[(D$95$m / d), $MachinePrecision]), $MachinePrecision] * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(d / N[Sqrt[l], $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}
\mathbf{if}\;d \leq 1.5 \cdot 10^{-280}:\\
\;\;\;\;\sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;d \leq 4.4 \cdot 10^{-226}:\\
\;\;\;\;\sqrt{\frac{h}{{\ell}^{3}}} \cdot \left(-0.125 \cdot \left(\left(M_m \cdot \frac{D_m}{d}\right) \cdot \left(D_m \cdot M_m\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}}\\
\end{array}
\end{array}
if d < 1.49999999999999994e-280Initial program 64.3%
Simplified66.3%
Taylor expanded in h around 0 45.0%
if 1.49999999999999994e-280 < d < 4.4e-226Initial program 56.8%
Simplified56.8%
Taylor expanded in d around 0 48.5%
associate-*r*48.5%
*-commutative48.5%
*-commutative48.5%
unpow248.5%
unpow248.5%
swap-sqr73.7%
unpow273.7%
*-commutative73.7%
Simplified73.7%
div-inv73.7%
unpow273.7%
associate-*l*73.7%
*-commutative73.7%
*-commutative73.7%
associate-*r*73.7%
div-inv73.7%
Applied egg-rr73.7%
if 4.4e-226 < d Initial program 74.9%
Simplified73.9%
Taylor expanded in d around inf 48.3%
sqrt-div48.2%
metadata-eval48.2%
un-div-inv48.2%
Applied egg-rr48.2%
*-un-lft-identity48.2%
sqrt-prod62.2%
times-frac62.2%
Applied egg-rr62.2%
associate-*l/62.3%
*-lft-identity62.3%
Simplified62.3%
Final simplification53.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 (<= d -2e-310)
(* (sqrt (/ d h)) (sqrt (/ d l)))
(if (<= d 1.6e-99)
(/ (* (/ (sqrt h) (pow l 1.5)) (* -0.125 (* D_m (* M_m (* D_m M_m))))) d)
(/ (/ d (sqrt 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 tmp;
if (d <= -2e-310) {
tmp = sqrt((d / h)) * sqrt((d / l));
} else if (d <= 1.6e-99) {
tmp = ((sqrt(h) / pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
} else {
tmp = (d / sqrt(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) :: tmp
if (d <= (-2d-310)) then
tmp = sqrt((d / h)) * sqrt((d / l))
else if (d <= 1.6d-99) then
tmp = ((sqrt(h) / (l ** 1.5d0)) * ((-0.125d0) * (d_m * (m_m * (d_m * m_m))))) / d
else
tmp = (d / sqrt(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 tmp;
if (d <= -2e-310) {
tmp = Math.sqrt((d / h)) * Math.sqrt((d / l));
} else if (d <= 1.6e-99) {
tmp = ((Math.sqrt(h) / Math.pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
} else {
tmp = (d / Math.sqrt(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): tmp = 0 if d <= -2e-310: tmp = math.sqrt((d / h)) * math.sqrt((d / l)) elif d <= 1.6e-99: tmp = ((math.sqrt(h) / math.pow(l, 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d else: tmp = (d / math.sqrt(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) tmp = 0.0 if (d <= -2e-310) tmp = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))); elseif (d <= 1.6e-99) tmp = Float64(Float64(Float64(sqrt(h) / (l ^ 1.5)) * Float64(-0.125 * Float64(D_m * Float64(M_m * Float64(D_m * M_m))))) / d); else tmp = Float64(Float64(d / sqrt(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)
tmp = 0.0;
if (d <= -2e-310)
tmp = sqrt((d / h)) * sqrt((d / l));
elseif (d <= 1.6e-99)
tmp = ((sqrt(h) / (l ^ 1.5)) * (-0.125 * (D_m * (M_m * (D_m * M_m))))) / d;
else
tmp = (d / sqrt(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_] := If[LessEqual[d, -2e-310], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.6e-99], N[(N[(N[(N[Sqrt[h], $MachinePrecision] / N[Power[l, 1.5], $MachinePrecision]), $MachinePrecision] * N[(-0.125 * N[(D$95$m * N[(M$95$m * N[(D$95$m * M$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / d), $MachinePrecision], N[(N[(d / N[Sqrt[l], $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}
\mathbf{if}\;d \leq -2 \cdot 10^{-310}:\\
\;\;\;\;\sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{elif}\;d \leq 1.6 \cdot 10^{-99}:\\
\;\;\;\;\frac{\frac{\sqrt{h}}{{\ell}^{1.5}} \cdot \left(-0.125 \cdot \left(D_m \cdot \left(M_m \cdot \left(D_m \cdot M_m\right)\right)\right)\right)}{d}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}}\\
\end{array}
\end{array}
if d < -1.999999999999994e-310Initial program 66.9%
Simplified68.9%
Taylor expanded in h around 0 45.8%
if -1.999999999999994e-310 < d < 1.6e-99Initial program 48.9%
Simplified48.9%
Taylor expanded in d around 0 36.4%
associate-*r*36.4%
*-commutative36.4%
*-commutative36.4%
unpow236.4%
unpow236.4%
swap-sqr43.2%
unpow243.2%
*-commutative43.2%
Simplified43.2%
associate-*r/42.8%
associate-*r/44.9%
sqrt-div44.9%
sqrt-pow156.8%
metadata-eval56.8%
*-commutative56.8%
Applied egg-rr56.8%
unpow256.8%
associate-*r*56.1%
*-commutative56.1%
Applied egg-rr56.1%
if 1.6e-99 < d Initial program 81.9%
Simplified80.5%
Taylor expanded in d around inf 55.1%
sqrt-div54.9%
metadata-eval54.9%
un-div-inv55.0%
Applied egg-rr55.0%
*-un-lft-identity55.0%
sqrt-prod70.0%
times-frac69.9%
Applied egg-rr69.9%
associate-*l/70.1%
*-lft-identity70.1%
Simplified70.1%
Final simplification54.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 2.3e-299) (sqrt (/ (pow d 2.0) (* l h))) (* d (/ (sqrt (/ 1.0 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 <= 2.3e-299) {
tmp = sqrt((pow(d, 2.0) / (l * h)));
} else {
tmp = d * (sqrt((1.0 / 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 <= 2.3d-299) then
tmp = sqrt(((d ** 2.0d0) / (l * h)))
else
tmp = d * (sqrt((1.0d0 / 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 <= 2.3e-299) {
tmp = Math.sqrt((Math.pow(d, 2.0) / (l * h)));
} else {
tmp = d * (Math.sqrt((1.0 / 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 <= 2.3e-299: tmp = math.sqrt((math.pow(d, 2.0) / (l * h))) else: tmp = d * (math.sqrt((1.0 / 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 <= 2.3e-299) tmp = sqrt(Float64((d ^ 2.0) / Float64(l * h))); else tmp = Float64(d * Float64(sqrt(Float64(1.0 / 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 <= 2.3e-299)
tmp = sqrt(((d ^ 2.0) / (l * h)));
else
tmp = d * (sqrt((1.0 / 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, 2.3e-299], N[Sqrt[N[(N[Power[d, 2.0], $MachinePrecision] / N[(l * h), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[(d * N[(N[Sqrt[N[(1.0 / h), $MachinePrecision]], $MachinePrecision] / N[Sqrt[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 2.3 \cdot 10^{-299}:\\
\;\;\;\;\sqrt{\frac{{d}^{2}}{\ell \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{\sqrt{\frac{1}{h}}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if l < 2.3000000000000001e-299Initial program 66.7%
Simplified68.7%
Taylor expanded in d around inf 6.7%
sqrt-div6.7%
metadata-eval6.7%
un-div-inv6.7%
add-sqr-sqrt1.5%
sqrt-prod1.5%
frac-times1.5%
sqrt-div1.5%
sqrt-div45.9%
pow145.9%
add-sqr-sqrt45.7%
sqrt-unprod33.3%
sqrt-pow233.3%
Applied egg-rr27.7%
unpow1/227.7%
Simplified27.7%
if 2.3000000000000001e-299 < l Initial program 70.0%
Simplified69.2%
Taylor expanded in d around inf 44.9%
associate-/r*44.9%
sqrt-div56.9%
Applied egg-rr56.9%
Final simplification41.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 (<= d 1.55e-282) (* (sqrt (/ d h)) (sqrt (/ d l))) (* d (/ (sqrt (/ 1.0 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 (d <= 1.55e-282) {
tmp = sqrt((d / h)) * sqrt((d / l));
} else {
tmp = d * (sqrt((1.0 / 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 (d <= 1.55d-282) then
tmp = sqrt((d / h)) * sqrt((d / l))
else
tmp = d * (sqrt((1.0d0 / 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 (d <= 1.55e-282) {
tmp = Math.sqrt((d / h)) * Math.sqrt((d / l));
} else {
tmp = d * (Math.sqrt((1.0 / 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 d <= 1.55e-282: tmp = math.sqrt((d / h)) * math.sqrt((d / l)) else: tmp = d * (math.sqrt((1.0 / 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 (d <= 1.55e-282) tmp = Float64(sqrt(Float64(d / h)) * sqrt(Float64(d / l))); else tmp = Float64(d * Float64(sqrt(Float64(1.0 / 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 (d <= 1.55e-282)
tmp = sqrt((d / h)) * sqrt((d / l));
else
tmp = d * (sqrt((1.0 / 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[d, 1.55e-282], N[(N[Sqrt[N[(d / h), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(d / l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(d * N[(N[Sqrt[N[(1.0 / h), $MachinePrecision]], $MachinePrecision] / N[Sqrt[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}\;d \leq 1.55 \cdot 10^{-282}:\\
\;\;\;\;\sqrt{\frac{d}{h}} \cdot \sqrt{\frac{d}{\ell}}\\
\mathbf{else}:\\
\;\;\;\;d \cdot \frac{\sqrt{\frac{1}{h}}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if d < 1.55000000000000007e-282Initial program 64.8%
Simplified66.7%
Taylor expanded in h around 0 45.3%
if 1.55000000000000007e-282 < d Initial program 72.4%
Simplified71.5%
Taylor expanded in d around inf 46.4%
associate-/r*46.4%
sqrt-div58.8%
Applied egg-rr58.8%
Final simplification51.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 (<= h 1.05e-303) (sqrt (/ (pow d 2.0) (* l h))) (/ (/ d (sqrt 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 tmp;
if (h <= 1.05e-303) {
tmp = sqrt((pow(d, 2.0) / (l * h)));
} else {
tmp = (d / sqrt(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) :: tmp
if (h <= 1.05d-303) then
tmp = sqrt(((d ** 2.0d0) / (l * h)))
else
tmp = (d / sqrt(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 tmp;
if (h <= 1.05e-303) {
tmp = Math.sqrt((Math.pow(d, 2.0) / (l * h)));
} else {
tmp = (d / Math.sqrt(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): tmp = 0 if h <= 1.05e-303: tmp = math.sqrt((math.pow(d, 2.0) / (l * h))) else: tmp = (d / math.sqrt(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) tmp = 0.0 if (h <= 1.05e-303) tmp = sqrt(Float64((d ^ 2.0) / Float64(l * h))); else tmp = Float64(Float64(d / sqrt(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)
tmp = 0.0;
if (h <= 1.05e-303)
tmp = sqrt(((d ^ 2.0) / (l * h)));
else
tmp = (d / sqrt(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_] := If[LessEqual[h, 1.05e-303], N[Sqrt[N[(N[Power[d, 2.0], $MachinePrecision] / N[(l * h), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[(N[(d / N[Sqrt[l], $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}
\mathbf{if}\;h \leq 1.05 \cdot 10^{-303}:\\
\;\;\;\;\sqrt{\frac{{d}^{2}}{\ell \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}}\\
\end{array}
\end{array}
if h < 1.05e-303Initial program 67.1%
Simplified69.2%
Taylor expanded in d around inf 6.0%
sqrt-div6.0%
metadata-eval6.0%
un-div-inv6.0%
add-sqr-sqrt0.7%
sqrt-prod0.7%
frac-times0.7%
sqrt-div0.7%
sqrt-div46.2%
pow146.2%
add-sqr-sqrt46.0%
sqrt-unprod33.5%
sqrt-pow233.5%
Applied egg-rr27.1%
unpow1/227.1%
Simplified27.1%
if 1.05e-303 < h Initial program 69.5%
Simplified68.6%
Taylor expanded in d around inf 45.4%
sqrt-div45.3%
metadata-eval45.3%
un-div-inv45.3%
Applied egg-rr45.3%
*-un-lft-identity45.3%
sqrt-prod57.3%
times-frac57.1%
Applied egg-rr57.1%
associate-*l/57.2%
*-lft-identity57.2%
Simplified57.2%
Final simplification41.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 (<= d 6.2e-209) (* d (sqrt (* (/ 1.0 h) (/ 1.0 l)))) (/ (/ 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 (d <= 6.2e-209) {
tmp = d * sqrt(((1.0 / h) * (1.0 / l)));
} 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 (d <= 6.2d-209) then
tmp = d * sqrt(((1.0d0 / h) * (1.0d0 / l)))
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 (d <= 6.2e-209) {
tmp = d * Math.sqrt(((1.0 / h) * (1.0 / l)));
} 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 d <= 6.2e-209: tmp = d * math.sqrt(((1.0 / h) * (1.0 / l))) 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 (d <= 6.2e-209) tmp = Float64(d * sqrt(Float64(Float64(1.0 / h) * Float64(1.0 / l)))); 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 (d <= 6.2e-209)
tmp = d * sqrt(((1.0 / h) * (1.0 / l)));
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[d, 6.2e-209], N[(d * N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] * N[(1.0 / l), $MachinePrecision]), $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}\;d \leq 6.2 \cdot 10^{-209}:\\
\;\;\;\;d \cdot \sqrt{\frac{1}{h} \cdot \frac{1}{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{h}}}{\sqrt{\ell}}\\
\end{array}
\end{array}
if d < 6.2e-209Initial program 62.8%
Simplified64.5%
Taylor expanded in d around inf 9.8%
associate-/r*9.8%
div-inv9.8%
Applied egg-rr9.8%
if 6.2e-209 < d Initial program 76.9%
Simplified75.9%
Taylor expanded in d around inf 48.2%
add-log-exp14.7%
sqrt-div14.6%
metadata-eval14.6%
un-div-inv14.6%
Applied egg-rr14.6%
add-log-exp48.1%
sqrt-prod62.7%
associate-/r*62.6%
Applied egg-rr62.6%
Final simplification30.2%
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.4e-208) (* d (sqrt (* (/ 1.0 h) (/ 1.0 l)))) (/ (/ d (sqrt 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 tmp;
if (d <= 1.4e-208) {
tmp = d * sqrt(((1.0 / h) * (1.0 / l)));
} else {
tmp = (d / sqrt(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) :: tmp
if (d <= 1.4d-208) then
tmp = d * sqrt(((1.0d0 / h) * (1.0d0 / l)))
else
tmp = (d / sqrt(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 tmp;
if (d <= 1.4e-208) {
tmp = d * Math.sqrt(((1.0 / h) * (1.0 / l)));
} else {
tmp = (d / Math.sqrt(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): tmp = 0 if d <= 1.4e-208: tmp = d * math.sqrt(((1.0 / h) * (1.0 / l))) else: tmp = (d / math.sqrt(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) tmp = 0.0 if (d <= 1.4e-208) tmp = Float64(d * sqrt(Float64(Float64(1.0 / h) * Float64(1.0 / l)))); else tmp = Float64(Float64(d / sqrt(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)
tmp = 0.0;
if (d <= 1.4e-208)
tmp = d * sqrt(((1.0 / h) * (1.0 / l)));
else
tmp = (d / sqrt(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_] := If[LessEqual[d, 1.4e-208], N[(d * N[Sqrt[N[(N[(1.0 / h), $MachinePrecision] * N[(1.0 / l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(d / N[Sqrt[l], $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}
\mathbf{if}\;d \leq 1.4 \cdot 10^{-208}:\\
\;\;\;\;d \cdot \sqrt{\frac{1}{h} \cdot \frac{1}{\ell}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{d}{\sqrt{\ell}}}{\sqrt{h}}\\
\end{array}
\end{array}
if d < 1.40000000000000001e-208Initial program 62.8%
Simplified64.5%
Taylor expanded in d around inf 9.8%
associate-/r*9.8%
div-inv9.8%
Applied egg-rr9.8%
if 1.40000000000000001e-208 < d Initial program 76.9%
Simplified75.9%
Taylor expanded in d around inf 48.2%
sqrt-div48.1%
metadata-eval48.1%
un-div-inv48.1%
Applied egg-rr48.1%
*-un-lft-identity48.1%
sqrt-prod62.7%
times-frac62.7%
Applied egg-rr62.7%
associate-*l/62.8%
*-lft-identity62.8%
Simplified62.8%
Final simplification30.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 (* d (sqrt (/ 1.0 (* 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((1.0 / (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((1.0d0 / (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((1.0 / (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((1.0 / (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(1.0 / 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((1.0 / (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[(1.0 / N[(l * h), $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])\\
\\
d \cdot \sqrt{\frac{1}{\ell \cdot h}}
\end{array}
Initial program 68.2%
Simplified68.9%
Taylor expanded in d around inf 24.6%
Final simplification24.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 (/ 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 68.2%
Simplified68.9%
Taylor expanded in d around inf 24.6%
sqrt-div24.6%
metadata-eval24.6%
un-div-inv24.6%
Applied egg-rr24.6%
Final simplification24.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 0.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) {
return 0.0;
}
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 = 0.0d0
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 0.0;
}
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 0.0
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 0.0 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 = 0.0;
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_] := 0.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])\\
\\
0
\end{array}
Initial program 68.2%
Simplified68.9%
Taylor expanded in d around inf 24.6%
add-log-exp14.5%
sqrt-div14.5%
metadata-eval14.5%
un-div-inv14.5%
Applied egg-rr14.5%
Taylor expanded in d around 0 6.1%
Final simplification6.1%
herbie shell --seed 2023326
(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)))))