
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))) (* R (sqrt (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2)))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
return R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
code = r * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
return R * Math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) return R * math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) return Float64(R * sqrt(Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))); end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
R \cdot \sqrt{t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 15 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))) (* R (sqrt (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2)))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
return R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
code = r * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
return R * Math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) return R * math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) return Float64(R * sqrt(Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))); end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
R \cdot \sqrt{t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\end{array}
\end{array}
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(pow
(sqrt
(*
R_m
(hypot
(*
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* phi2 0.5)) (sin (* 0.5 phi1))))
(- lambda1 lambda2))
(- phi1 phi2))))
2.0)))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * pow(sqrt((R_m * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * (lambda1 - lambda2)), (phi1 - phi2)))), 2.0);
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * Math.pow(Math.sqrt((R_m * Math.hypot((((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((phi2 * 0.5)) * Math.sin((0.5 * phi1)))) * (lambda1 - lambda2)), (phi1 - phi2)))), 2.0);
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * math.pow(math.sqrt((R_m * math.hypot((((math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))) - (math.sin((phi2 * 0.5)) * math.sin((0.5 * phi1)))) * (lambda1 - lambda2)), (phi1 - phi2)))), 2.0)
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * (sqrt(Float64(R_m * hypot(Float64(Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(phi2 * 0.5)) * sin(Float64(0.5 * phi1)))) * Float64(lambda1 - lambda2)), Float64(phi1 - phi2)))) ^ 2.0)) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = R_s * (sqrt((R_m * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * (lambda1 - lambda2)), (phi1 - phi2)))) ^ 2.0); end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[Power[N[Sqrt[N[(R$95$m * N[Sqrt[N[(N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot {\left(\sqrt{R\_m \cdot \mathsf{hypot}\left(\left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\right) \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)}\right)}^{2}
\end{array}
Initial program 60.3%
hypot-define96.4%
Simplified96.4%
add-sqr-sqrt51.1%
pow251.1%
*-commutative51.1%
div-inv51.1%
metadata-eval51.1%
Applied egg-rr51.1%
*-commutative51.1%
+-commutative51.1%
distribute-rgt-in51.1%
*-commutative51.1%
cos-sum52.4%
*-commutative52.4%
*-commutative52.4%
Applied egg-rr52.4%
Final simplification52.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda1 -3.5e+212)
(pow
(sqrt
(*
R_m
(hypot
(*
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* phi2 0.5)) (sin (* 0.5 phi1))))
lambda1)
(- phi1 phi2))))
2.0)
(*
R_m
(hypot
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2.0)))
(- phi1 phi2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -3.5e+212) {
tmp = pow(sqrt((R_m * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * lambda1), (phi1 - phi2)))), 2.0);
} else {
tmp = R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -3.5e+212) {
tmp = Math.pow(Math.sqrt((R_m * Math.hypot((((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((phi2 * 0.5)) * Math.sin((0.5 * phi1)))) * lambda1), (phi1 - phi2)))), 2.0);
} else {
tmp = R_m * Math.hypot(((lambda1 - lambda2) * Math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -3.5e+212: tmp = math.pow(math.sqrt((R_m * math.hypot((((math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))) - (math.sin((phi2 * 0.5)) * math.sin((0.5 * phi1)))) * lambda1), (phi1 - phi2)))), 2.0) else: tmp = R_m * math.hypot(((lambda1 - lambda2) * math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -3.5e+212) tmp = sqrt(Float64(R_m * hypot(Float64(Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(phi2 * 0.5)) * sin(Float64(0.5 * phi1)))) * lambda1), Float64(phi1 - phi2)))) ^ 2.0; else tmp = Float64(R_m * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi2 + phi1) / 2.0))), Float64(phi1 - phi2))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda1 <= -3.5e+212) tmp = sqrt((R_m * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * lambda1), (phi1 - phi2)))) ^ 2.0; else tmp = R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -3.5e+212], N[Power[N[Sqrt[N[(R$95$m * N[Sqrt[N[(N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * lambda1), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision], N[(R$95$m * N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi2 + phi1), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -3.5 \cdot 10^{+212}:\\
\;\;\;\;{\left(\sqrt{R\_m \cdot \mathsf{hypot}\left(\left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\right) \cdot \lambda_1, \phi_1 - \phi_2\right)}\right)}^{2}\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if lambda1 < -3.49999999999999987e212Initial program 32.5%
hypot-define80.4%
Simplified80.4%
add-sqr-sqrt49.2%
pow249.2%
*-commutative49.2%
div-inv49.2%
metadata-eval49.2%
Applied egg-rr49.2%
*-commutative49.2%
+-commutative49.2%
distribute-rgt-in49.2%
*-commutative49.2%
cos-sum56.8%
*-commutative56.8%
*-commutative56.8%
Applied egg-rr56.8%
Taylor expanded in lambda1 around inf 56.8%
if -3.49999999999999987e212 < lambda1 Initial program 62.8%
hypot-define97.8%
Simplified97.8%
Final simplification94.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -3.5e-7)
(* R_m (hypot (* (cos (* 0.5 phi1)) (- lambda1 lambda2)) (- phi1 phi2)))
(* R_m (hypot (* (- lambda1 lambda2) (cos (* phi2 0.5))) (- phi1 phi2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -3.5e-7) {
tmp = R_m * hypot((cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2));
} else {
tmp = R_m * hypot(((lambda1 - lambda2) * cos((phi2 * 0.5))), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -3.5e-7) {
tmp = R_m * Math.hypot((Math.cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2));
} else {
tmp = R_m * Math.hypot(((lambda1 - lambda2) * Math.cos((phi2 * 0.5))), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -3.5e-7: tmp = R_m * math.hypot((math.cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2)) else: tmp = R_m * math.hypot(((lambda1 - lambda2) * math.cos((phi2 * 0.5))), (phi1 - phi2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -3.5e-7) tmp = Float64(R_m * hypot(Float64(cos(Float64(0.5 * phi1)) * Float64(lambda1 - lambda2)), Float64(phi1 - phi2))); else tmp = Float64(R_m * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(phi2 * 0.5))), Float64(phi1 - phi2))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi1 <= -3.5e-7) tmp = R_m * hypot((cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2)); else tmp = R_m * hypot(((lambda1 - lambda2) * cos((phi2 * 0.5))), (phi1 - phi2)); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -3.5e-7], N[(R$95$m * N[Sqrt[N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -3.5 \cdot 10^{-7}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\phi_2 \cdot 0.5\right), \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if phi1 < -3.49999999999999984e-7Initial program 57.8%
hypot-define93.0%
Simplified93.0%
Taylor expanded in phi2 around 0 93.1%
if -3.49999999999999984e-7 < phi1 Initial program 61.3%
hypot-define97.7%
Simplified97.7%
Taylor expanded in phi1 around 0 93.3%
Final simplification93.2%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda2 1e-211)
(* R_m (hypot (* lambda1 (cos (* phi2 0.5))) (- phi1 phi2)))
(* R_m (hypot (* (cos (* 0.5 phi1)) (- lambda1 lambda2)) (- phi1 phi2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1e-211) {
tmp = R_m * hypot((lambda1 * cos((phi2 * 0.5))), (phi1 - phi2));
} else {
tmp = R_m * hypot((cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1e-211) {
tmp = R_m * Math.hypot((lambda1 * Math.cos((phi2 * 0.5))), (phi1 - phi2));
} else {
tmp = R_m * Math.hypot((Math.cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 1e-211: tmp = R_m * math.hypot((lambda1 * math.cos((phi2 * 0.5))), (phi1 - phi2)) else: tmp = R_m * math.hypot((math.cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 1e-211) tmp = Float64(R_m * hypot(Float64(lambda1 * cos(Float64(phi2 * 0.5))), Float64(phi1 - phi2))); else tmp = Float64(R_m * hypot(Float64(cos(Float64(0.5 * phi1)) * Float64(lambda1 - lambda2)), Float64(phi1 - phi2))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 1e-211) tmp = R_m * hypot((lambda1 * cos((phi2 * 0.5))), (phi1 - phi2)); else tmp = R_m * hypot((cos((0.5 * phi1)) * (lambda1 - lambda2)), (phi1 - phi2)); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda2, 1e-211], N[(R$95$m * N[Sqrt[N[(lambda1 * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[Sqrt[N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 10^{-211}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\lambda_1 \cdot \cos \left(\phi_2 \cdot 0.5\right), \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if lambda2 < 1.00000000000000009e-211Initial program 61.3%
hypot-define96.5%
Simplified96.5%
Taylor expanded in phi1 around 0 93.9%
Taylor expanded in lambda1 around inf 82.0%
if 1.00000000000000009e-211 < lambda2 Initial program 59.3%
hypot-define96.2%
Simplified96.2%
Taylor expanded in phi2 around 0 89.4%
Final simplification85.5%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda2 7.2e+49)
(* R_m (hypot (* lambda1 (cos (* phi2 0.5))) (- phi1 phi2)))
(* R_m (hypot phi2 (- lambda1 lambda2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 7.2e+49) {
tmp = R_m * hypot((lambda1 * cos((phi2 * 0.5))), (phi1 - phi2));
} else {
tmp = R_m * hypot(phi2, (lambda1 - lambda2));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 7.2e+49) {
tmp = R_m * Math.hypot((lambda1 * Math.cos((phi2 * 0.5))), (phi1 - phi2));
} else {
tmp = R_m * Math.hypot(phi2, (lambda1 - lambda2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 7.2e+49: tmp = R_m * math.hypot((lambda1 * math.cos((phi2 * 0.5))), (phi1 - phi2)) else: tmp = R_m * math.hypot(phi2, (lambda1 - lambda2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 7.2e+49) tmp = Float64(R_m * hypot(Float64(lambda1 * cos(Float64(phi2 * 0.5))), Float64(phi1 - phi2))); else tmp = Float64(R_m * hypot(phi2, Float64(lambda1 - lambda2))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 7.2e+49) tmp = R_m * hypot((lambda1 * cos((phi2 * 0.5))), (phi1 - phi2)); else tmp = R_m * hypot(phi2, (lambda1 - lambda2)); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda2, 7.2e+49], N[(R$95$m * N[Sqrt[N[(lambda1 * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[Sqrt[phi2 ^ 2 + N[(lambda1 - lambda2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 7.2 \cdot 10^{+49}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\lambda_1 \cdot \cos \left(\phi_2 \cdot 0.5\right), \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\phi_2, \lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if lambda2 < 7.19999999999999993e49Initial program 61.5%
hypot-define97.6%
Simplified97.6%
Taylor expanded in phi1 around 0 94.9%
Taylor expanded in lambda1 around inf 85.7%
if 7.19999999999999993e49 < lambda2 Initial program 56.7%
hypot-define92.7%
Simplified92.7%
Taylor expanded in phi2 around 0 74.4%
associate-*r*74.4%
Simplified74.4%
Taylor expanded in phi1 around 0 49.0%
unpow249.0%
unpow249.0%
hypot-define62.8%
Simplified62.8%
Final simplification80.1%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* R_m (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2.0))) (- phi1 phi2)))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)));
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * Math.hypot(((lambda1 - lambda2) * Math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)));
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (R_m * math.hypot(((lambda1 - lambda2) * math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)))
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(R_m * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi2 + phi1) / 2.0))), Float64(phi1 - phi2)))) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = R_s * (R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2))); end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(R$95$m * N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi2 + phi1), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \left(R\_m \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right)\right)
\end{array}
Initial program 60.3%
hypot-define96.4%
Simplified96.4%
Final simplification96.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -2.5e+14)
(* phi1 (- (* R_m (/ phi2 phi1)) R_m))
(* R_m (hypot phi2 (- lambda1 lambda2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -2.5e+14) {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
} else {
tmp = R_m * hypot(phi2, (lambda1 - lambda2));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -2.5e+14) {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
} else {
tmp = R_m * Math.hypot(phi2, (lambda1 - lambda2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -2.5e+14: tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m) else: tmp = R_m * math.hypot(phi2, (lambda1 - lambda2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -2.5e+14) tmp = Float64(phi1 * Float64(Float64(R_m * Float64(phi2 / phi1)) - R_m)); else tmp = Float64(R_m * hypot(phi2, Float64(lambda1 - lambda2))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi1 <= -2.5e+14) tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m); else tmp = R_m * hypot(phi2, (lambda1 - lambda2)); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -2.5e+14], N[(phi1 * N[(N[(R$95$m * N[(phi2 / phi1), $MachinePrecision]), $MachinePrecision] - R$95$m), $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[Sqrt[phi2 ^ 2 + N[(lambda1 - lambda2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.5 \cdot 10^{+14}:\\
\;\;\;\;\phi_1 \cdot \left(R\_m \cdot \frac{\phi_2}{\phi_1} - R\_m\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\phi_2, \lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if phi1 < -2.5e14Initial program 59.6%
hypot-define92.6%
Simplified92.6%
Taylor expanded in phi1 around -inf 67.6%
associate-*r*67.6%
mul-1-neg67.6%
mul-1-neg67.6%
unsub-neg67.6%
*-commutative67.6%
associate-/l*70.9%
Simplified70.9%
Taylor expanded in phi2 around 0 67.6%
associate-/l*72.1%
Simplified72.1%
if -2.5e14 < phi1 Initial program 60.6%
hypot-define97.7%
Simplified97.7%
Taylor expanded in phi2 around 0 81.3%
associate-*r*81.3%
Simplified81.3%
Taylor expanded in phi1 around 0 47.5%
unpow247.5%
unpow247.5%
hypot-define67.9%
Simplified67.9%
Final simplification69.0%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda1 -1.7e+242)
(* R_m (- lambda1))
(if (<= lambda1 -1.45e-306)
(* R_m (* phi1 (+ (/ phi2 phi1) -1.0)))
(* phi2 (- R_m (* phi1 (/ R_m phi2))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.7e+242) {
tmp = R_m * -lambda1;
} else if (lambda1 <= -1.45e-306) {
tmp = R_m * (phi1 * ((phi2 / phi1) + -1.0));
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda1 <= (-1.7d+242)) then
tmp = r_m * -lambda1
else if (lambda1 <= (-1.45d-306)) then
tmp = r_m * (phi1 * ((phi2 / phi1) + (-1.0d0)))
else
tmp = phi2 * (r_m - (phi1 * (r_m / phi2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.7e+242) {
tmp = R_m * -lambda1;
} else if (lambda1 <= -1.45e-306) {
tmp = R_m * (phi1 * ((phi2 / phi1) + -1.0));
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -1.7e+242: tmp = R_m * -lambda1 elif lambda1 <= -1.45e-306: tmp = R_m * (phi1 * ((phi2 / phi1) + -1.0)) else: tmp = phi2 * (R_m - (phi1 * (R_m / phi2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -1.7e+242) tmp = Float64(R_m * Float64(-lambda1)); elseif (lambda1 <= -1.45e-306) tmp = Float64(R_m * Float64(phi1 * Float64(Float64(phi2 / phi1) + -1.0))); else tmp = Float64(phi2 * Float64(R_m - Float64(phi1 * Float64(R_m / phi2)))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda1 <= -1.7e+242) tmp = R_m * -lambda1; elseif (lambda1 <= -1.45e-306) tmp = R_m * (phi1 * ((phi2 / phi1) + -1.0)); else tmp = phi2 * (R_m - (phi1 * (R_m / phi2))); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -1.7e+242], N[(R$95$m * (-lambda1)), $MachinePrecision], If[LessEqual[lambda1, -1.45e-306], N[(R$95$m * N[(phi1 * N[(N[(phi2 / phi1), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(phi2 * N[(R$95$m - N[(phi1 * N[(R$95$m / phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -1.7 \cdot 10^{+242}:\\
\;\;\;\;R\_m \cdot \left(-\lambda_1\right)\\
\mathbf{elif}\;\lambda_1 \leq -1.45 \cdot 10^{-306}:\\
\;\;\;\;R\_m \cdot \left(\phi_1 \cdot \left(\frac{\phi_2}{\phi_1} + -1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\phi_2 \cdot \left(R\_m - \phi_1 \cdot \frac{R\_m}{\phi_2}\right)\\
\end{array}
\end{array}
if lambda1 < -1.69999999999999991e242Initial program 33.1%
hypot-define80.7%
Simplified80.7%
Taylor expanded in lambda1 around -inf 44.4%
mul-1-neg44.4%
associate-*r*44.4%
distribute-lft-neg-in44.4%
+-commutative44.4%
Simplified44.4%
Taylor expanded in phi2 around 0 47.9%
Taylor expanded in phi1 around 0 56.6%
mul-1-neg56.6%
Simplified56.6%
if -1.69999999999999991e242 < lambda1 < -1.4499999999999999e-306Initial program 64.8%
hypot-define97.5%
Simplified97.5%
Taylor expanded in phi1 around -inf 29.4%
mul-1-neg29.4%
distribute-rgt-neg-in29.4%
mul-1-neg29.4%
unsub-neg29.4%
Simplified29.4%
if -1.4499999999999999e-306 < lambda1 Initial program 60.3%
hypot-define97.5%
Simplified97.5%
Taylor expanded in phi2 around inf 35.5%
mul-1-neg35.5%
unsub-neg35.5%
*-commutative35.5%
associate-/l*32.2%
Simplified32.2%
Final simplification32.7%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -1.9e-246)
(* phi1 (- (* R_m (/ phi2 phi1)) R_m))
(* phi2 (- R_m (* phi1 (/ R_m phi2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.9e-246) {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi1 <= (-1.9d-246)) then
tmp = phi1 * ((r_m * (phi2 / phi1)) - r_m)
else
tmp = phi2 * (r_m - (phi1 * (r_m / phi2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.9e-246) {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -1.9e-246: tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m) else: tmp = phi2 * (R_m - (phi1 * (R_m / phi2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -1.9e-246) tmp = Float64(phi1 * Float64(Float64(R_m * Float64(phi2 / phi1)) - R_m)); else tmp = Float64(phi2 * Float64(R_m - Float64(phi1 * Float64(R_m / phi2)))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi1 <= -1.9e-246) tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m); else tmp = phi2 * (R_m - (phi1 * (R_m / phi2))); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -1.9e-246], N[(phi1 * N[(N[(R$95$m * N[(phi2 / phi1), $MachinePrecision]), $MachinePrecision] - R$95$m), $MachinePrecision]), $MachinePrecision], N[(phi2 * N[(R$95$m - N[(phi1 * N[(R$95$m / phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.9 \cdot 10^{-246}:\\
\;\;\;\;\phi_1 \cdot \left(R\_m \cdot \frac{\phi_2}{\phi_1} - R\_m\right)\\
\mathbf{else}:\\
\;\;\;\;\phi_2 \cdot \left(R\_m - \phi_1 \cdot \frac{R\_m}{\phi_2}\right)\\
\end{array}
\end{array}
if phi1 < -1.89999999999999988e-246Initial program 57.3%
hypot-define95.6%
Simplified95.6%
Taylor expanded in phi1 around -inf 52.2%
associate-*r*52.2%
mul-1-neg52.2%
mul-1-neg52.2%
unsub-neg52.2%
*-commutative52.2%
associate-/l*54.1%
Simplified54.1%
Taylor expanded in phi2 around 0 52.2%
associate-/l*54.8%
Simplified54.8%
if -1.89999999999999988e-246 < phi1 Initial program 62.8%
hypot-define97.0%
Simplified97.0%
Taylor expanded in phi2 around inf 16.2%
mul-1-neg16.2%
unsub-neg16.2%
*-commutative16.2%
associate-/l*16.5%
Simplified16.5%
Final simplification33.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda1 -1.15e+223)
(* R_m (- lambda1))
(* phi2 (- R_m (* phi1 (/ R_m phi2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.15e+223) {
tmp = R_m * -lambda1;
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda1 <= (-1.15d+223)) then
tmp = r_m * -lambda1
else
tmp = phi2 * (r_m - (phi1 * (r_m / phi2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.15e+223) {
tmp = R_m * -lambda1;
} else {
tmp = phi2 * (R_m - (phi1 * (R_m / phi2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -1.15e+223: tmp = R_m * -lambda1 else: tmp = phi2 * (R_m - (phi1 * (R_m / phi2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -1.15e+223) tmp = Float64(R_m * Float64(-lambda1)); else tmp = Float64(phi2 * Float64(R_m - Float64(phi1 * Float64(R_m / phi2)))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda1 <= -1.15e+223) tmp = R_m * -lambda1; else tmp = phi2 * (R_m - (phi1 * (R_m / phi2))); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -1.15e+223], N[(R$95$m * (-lambda1)), $MachinePrecision], N[(phi2 * N[(R$95$m - N[(phi1 * N[(R$95$m / phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -1.15 \cdot 10^{+223}:\\
\;\;\;\;R\_m \cdot \left(-\lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;\phi_2 \cdot \left(R\_m - \phi_1 \cdot \frac{R\_m}{\phi_2}\right)\\
\end{array}
\end{array}
if lambda1 < -1.15000000000000002e223Initial program 35.1%
hypot-define82.7%
Simplified82.7%
Taylor expanded in lambda1 around -inf 40.1%
mul-1-neg40.1%
associate-*r*40.1%
distribute-lft-neg-in40.1%
+-commutative40.1%
Simplified40.1%
Taylor expanded in phi2 around 0 48.2%
Taylor expanded in phi1 around 0 56.3%
mul-1-neg56.3%
Simplified56.3%
if -1.15000000000000002e223 < lambda1 Initial program 62.4%
hypot-define97.5%
Simplified97.5%
Taylor expanded in phi2 around inf 32.6%
mul-1-neg32.6%
unsub-neg32.6%
*-commutative32.6%
associate-/l*30.6%
Simplified30.6%
Final simplification32.5%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi2 2.9e-54)
(* R_m (- phi1))
(* R_m (* phi2 (- 1.0 (/ phi1 phi2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 2.9e-54) {
tmp = R_m * -phi1;
} else {
tmp = R_m * (phi2 * (1.0 - (phi1 / phi2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi2 <= 2.9d-54) then
tmp = r_m * -phi1
else
tmp = r_m * (phi2 * (1.0d0 - (phi1 / phi2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 2.9e-54) {
tmp = R_m * -phi1;
} else {
tmp = R_m * (phi2 * (1.0 - (phi1 / phi2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi2 <= 2.9e-54: tmp = R_m * -phi1 else: tmp = R_m * (phi2 * (1.0 - (phi1 / phi2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 2.9e-54) tmp = Float64(R_m * Float64(-phi1)); else tmp = Float64(R_m * Float64(phi2 * Float64(1.0 - Float64(phi1 / phi2)))); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi2 <= 2.9e-54) tmp = R_m * -phi1; else tmp = R_m * (phi2 * (1.0 - (phi1 / phi2))); end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi2, 2.9e-54], N[(R$95$m * (-phi1)), $MachinePrecision], N[(R$95$m * N[(phi2 * N[(1.0 - N[(phi1 / phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq 2.9 \cdot 10^{-54}:\\
\;\;\;\;R\_m \cdot \left(-\phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \left(\phi_2 \cdot \left(1 - \frac{\phi_1}{\phi_2}\right)\right)\\
\end{array}
\end{array}
if phi2 < 2.90000000000000015e-54Initial program 63.3%
hypot-define98.0%
Simplified98.0%
Taylor expanded in phi1 around -inf 24.1%
mul-1-neg24.1%
Simplified24.1%
if 2.90000000000000015e-54 < phi2 Initial program 53.0%
hypot-define92.2%
Simplified92.2%
Taylor expanded in phi2 around inf 58.1%
mul-1-neg58.1%
unsub-neg58.1%
Simplified58.1%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (if (<= phi1 -17000000000.0) (* R_m (- phi1)) (* R_m phi2))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -17000000000.0) {
tmp = R_m * -phi1;
} else {
tmp = R_m * phi2;
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi1 <= (-17000000000.0d0)) then
tmp = r_m * -phi1
else
tmp = r_m * phi2
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -17000000000.0) {
tmp = R_m * -phi1;
} else {
tmp = R_m * phi2;
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -17000000000.0: tmp = R_m * -phi1 else: tmp = R_m * phi2 return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -17000000000.0) tmp = Float64(R_m * Float64(-phi1)); else tmp = Float64(R_m * phi2); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi1 <= -17000000000.0) tmp = R_m * -phi1; else tmp = R_m * phi2; end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -17000000000.0], N[(R$95$m * (-phi1)), $MachinePrecision], N[(R$95$m * phi2), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -17000000000:\\
\;\;\;\;R\_m \cdot \left(-\phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \phi_2\\
\end{array}
\end{array}
if phi1 < -1.7e10Initial program 59.6%
hypot-define92.6%
Simplified92.6%
Taylor expanded in phi1 around -inf 73.7%
mul-1-neg73.7%
Simplified73.7%
if -1.7e10 < phi1 Initial program 60.6%
hypot-define97.7%
Simplified97.7%
Taylor expanded in phi2 around inf 18.3%
*-commutative18.3%
Simplified18.3%
Final simplification32.6%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (if (<= phi2 3.2e-36) (* R_m (- lambda1)) (* R_m phi2))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 3.2e-36) {
tmp = R_m * -lambda1;
} else {
tmp = R_m * phi2;
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi2 <= 3.2d-36) then
tmp = r_m * -lambda1
else
tmp = r_m * phi2
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 3.2e-36) {
tmp = R_m * -lambda1;
} else {
tmp = R_m * phi2;
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi2 <= 3.2e-36: tmp = R_m * -lambda1 else: tmp = R_m * phi2 return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 3.2e-36) tmp = Float64(R_m * Float64(-lambda1)); else tmp = Float64(R_m * phi2); end return Float64(R_s * tmp) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (phi2 <= 3.2e-36) tmp = R_m * -lambda1; else tmp = R_m * phi2; end tmp_2 = R_s * tmp; end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi2, 3.2e-36], N[(R$95$m * (-lambda1)), $MachinePrecision], N[(R$95$m * phi2), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq 3.2 \cdot 10^{-36}:\\
\;\;\;\;R\_m \cdot \left(-\lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \phi_2\\
\end{array}
\end{array}
if phi2 < 3.20000000000000021e-36Initial program 64.0%
hypot-define98.1%
Simplified98.1%
Taylor expanded in lambda1 around -inf 15.4%
mul-1-neg15.4%
associate-*r*15.4%
distribute-lft-neg-in15.4%
+-commutative15.4%
Simplified15.4%
Taylor expanded in phi2 around 0 15.4%
Taylor expanded in phi1 around 0 13.5%
mul-1-neg13.5%
Simplified13.5%
if 3.20000000000000021e-36 < phi2 Initial program 50.3%
hypot-define91.8%
Simplified91.8%
Taylor expanded in phi2 around inf 47.4%
*-commutative47.4%
Simplified47.4%
Final simplification22.7%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* R_m phi2)))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * phi2);
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r_s * (r_m * phi2)
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * phi2);
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (R_m * phi2)
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(R_m * phi2)) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = R_s * (R_m * phi2); end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(R$95$m * phi2), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \left(R\_m \cdot \phi_2\right)
\end{array}
Initial program 60.3%
hypot-define96.4%
Simplified96.4%
Taylor expanded in phi2 around inf 15.8%
*-commutative15.8%
Simplified15.8%
Final simplification15.8%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* R_m lambda1)))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * lambda1);
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r_s * (r_m * lambda1)
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * lambda1);
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (R_m * lambda1)
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(R_m * lambda1)) end
R\_m = abs(R); R\_s = sign(R) * abs(1.0); function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = R_s * (R_m * lambda1); end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(R$95$m * lambda1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \left(R\_m \cdot \lambda_1\right)
\end{array}
Initial program 60.3%
hypot-define96.4%
Simplified96.4%
Taylor expanded in lambda1 around -inf 14.0%
mul-1-neg14.0%
associate-*r*13.9%
distribute-lft-neg-in13.9%
+-commutative13.9%
Simplified13.9%
Taylor expanded in phi2 around 0 13.7%
Taylor expanded in phi1 around 0 12.0%
mul-1-neg12.0%
Simplified12.0%
add-sqr-sqrt7.6%
sqrt-unprod14.1%
sqr-neg14.1%
sqrt-unprod8.8%
add-sqr-sqrt14.5%
*-commutative14.5%
Applied egg-rr14.5%
Final simplification14.5%
herbie shell --seed 2024119
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))