
(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
(*
(sqrt R_m)
(*
(hypot
(*
(- lambda1 lambda2)
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* 0.5 phi1)) (sin (* phi2 0.5)))))
(- phi1 phi2))
(sqrt R_m)))))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 * (sqrt(R_m) * (hypot(((lambda1 - lambda2) * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (phi1 - phi2)) * sqrt(R_m)));
}
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.sqrt(R_m) * (Math.hypot(((lambda1 - lambda2) * ((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((0.5 * phi1)) * Math.sin((phi2 * 0.5))))), (phi1 - phi2)) * Math.sqrt(R_m)));
}
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.sqrt(R_m) * (math.hypot(((lambda1 - lambda2) * ((math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))) - (math.sin((0.5 * phi1)) * math.sin((phi2 * 0.5))))), (phi1 - phi2)) * math.sqrt(R_m)))
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(sqrt(R_m) * Float64(hypot(Float64(Float64(lambda1 - lambda2) * Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(0.5 * phi1)) * sin(Float64(phi2 * 0.5))))), Float64(phi1 - phi2)) * sqrt(R_m)))) 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(((lambda1 - lambda2) * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (phi1 - phi2)) * sqrt(R_m))); 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[(N[Sqrt[R$95$m], $MachinePrecision] * N[(N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision] * N[Sqrt[R$95$m], $MachinePrecision]), $MachinePrecision]), $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 \left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(0.5 \cdot \phi_1\right) \cdot \sin \left(\phi_2 \cdot 0.5\right)\right), \phi_1 - \phi_2\right) \cdot \sqrt{R\_m}\right)\right)
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
add-sqr-sqrt45.1%
pow245.1%
*-commutative45.1%
div-inv45.1%
metadata-eval45.1%
Applied egg-rr45.1%
unpow245.1%
add-sqr-sqrt95.7%
*-commutative95.7%
add-sqr-sqrt45.1%
associate-*r*45.1%
*-commutative45.1%
Applied egg-rr45.1%
*-commutative45.1%
+-commutative45.1%
distribute-rgt-in45.1%
cos-sum47.4%
Applied egg-rr47.4%
Final simplification47.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
(let* ((t_0 (* (cos (* 0.5 phi1)) (cos (* phi2 0.5))))
(t_1 (* (sin (* 0.5 phi1)) (sin (* phi2 0.5)))))
(*
R_s
(if (<= lambda1 -5.8e+174)
(pow (sqrt (* R_m (hypot (* lambda1 (- t_0 t_1)) (- phi1 phi2)))) 2.0)
(if (<= lambda1 -2.4e-254)
(*
R_m
(hypot
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2.0)))
(- phi1 phi2)))
(pow
(sqrt (* R_m (hypot (* lambda2 (- t_1 t_0)) (- 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) {
double t_0 = cos((0.5 * phi1)) * cos((phi2 * 0.5));
double t_1 = sin((0.5 * phi1)) * sin((phi2 * 0.5));
double tmp;
if (lambda1 <= -5.8e+174) {
tmp = pow(sqrt((R_m * hypot((lambda1 * (t_0 - t_1)), (phi1 - phi2)))), 2.0);
} else if (lambda1 <= -2.4e-254) {
tmp = R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
} else {
tmp = pow(sqrt((R_m * hypot((lambda2 * (t_1 - t_0)), (phi1 - phi2)))), 2.0);
}
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 t_0 = Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5));
double t_1 = Math.sin((0.5 * phi1)) * Math.sin((phi2 * 0.5));
double tmp;
if (lambda1 <= -5.8e+174) {
tmp = Math.pow(Math.sqrt((R_m * Math.hypot((lambda1 * (t_0 - t_1)), (phi1 - phi2)))), 2.0);
} else if (lambda1 <= -2.4e-254) {
tmp = R_m * Math.hypot(((lambda1 - lambda2) * Math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
} else {
tmp = Math.pow(Math.sqrt((R_m * Math.hypot((lambda2 * (t_1 - t_0)), (phi1 - phi2)))), 2.0);
}
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): t_0 = math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5)) t_1 = math.sin((0.5 * phi1)) * math.sin((phi2 * 0.5)) tmp = 0 if lambda1 <= -5.8e+174: tmp = math.pow(math.sqrt((R_m * math.hypot((lambda1 * (t_0 - t_1)), (phi1 - phi2)))), 2.0) elif lambda1 <= -2.4e-254: tmp = R_m * math.hypot(((lambda1 - lambda2) * math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)) else: tmp = math.pow(math.sqrt((R_m * math.hypot((lambda2 * (t_1 - t_0)), (phi1 - phi2)))), 2.0) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) t_1 = Float64(sin(Float64(0.5 * phi1)) * sin(Float64(phi2 * 0.5))) tmp = 0.0 if (lambda1 <= -5.8e+174) tmp = sqrt(Float64(R_m * hypot(Float64(lambda1 * Float64(t_0 - t_1)), Float64(phi1 - phi2)))) ^ 2.0; elseif (lambda1 <= -2.4e-254) tmp = Float64(R_m * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi2 + phi1) / 2.0))), Float64(phi1 - phi2))); else tmp = sqrt(Float64(R_m * hypot(Float64(lambda2 * Float64(t_1 - t_0)), Float64(phi1 - phi2)))) ^ 2.0; 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) t_0 = cos((0.5 * phi1)) * cos((phi2 * 0.5)); t_1 = sin((0.5 * phi1)) * sin((phi2 * 0.5)); tmp = 0.0; if (lambda1 <= -5.8e+174) tmp = sqrt((R_m * hypot((lambda1 * (t_0 - t_1)), (phi1 - phi2)))) ^ 2.0; elseif (lambda1 <= -2.4e-254) tmp = R_m * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)); else tmp = sqrt((R_m * hypot((lambda2 * (t_1 - t_0)), (phi1 - phi2)))) ^ 2.0; 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_] := Block[{t$95$0 = N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[lambda1, -5.8e+174], N[Power[N[Sqrt[N[(R$95$m * N[Sqrt[N[(lambda1 * N[(t$95$0 - t$95$1), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision], If[LessEqual[lambda1, -2.4e-254], 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], N[Power[N[Sqrt[N[(R$95$m * N[Sqrt[N[(lambda2 * N[(t$95$1 - t$95$0), $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)
\\
\begin{array}{l}
t_0 := \cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right)\\
t_1 := \sin \left(0.5 \cdot \phi_1\right) \cdot \sin \left(\phi_2 \cdot 0.5\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -5.8 \cdot 10^{+174}:\\
\;\;\;\;{\left(\sqrt{R\_m \cdot \mathsf{hypot}\left(\lambda_1 \cdot \left(t\_0 - t\_1\right), \phi_1 - \phi_2\right)}\right)}^{2}\\
\mathbf{elif}\;\lambda_1 \leq -2.4 \cdot 10^{-254}:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;{\left(\sqrt{R\_m \cdot \mathsf{hypot}\left(\lambda_2 \cdot \left(t\_1 - t\_0\right), \phi_1 - \phi_2\right)}\right)}^{2}\\
\end{array}
\end{array}
\end{array}
if lambda1 < -5.7999999999999999e174Initial program 38.7%
hypot-define90.6%
Simplified90.6%
add-sqr-sqrt57.1%
pow257.1%
*-commutative57.1%
div-inv57.1%
metadata-eval57.1%
Applied egg-rr57.1%
*-commutative57.1%
+-commutative57.1%
distribute-rgt-in57.1%
cos-sum61.1%
Applied egg-rr61.1%
Taylor expanded in lambda1 around inf 61.1%
if -5.7999999999999999e174 < lambda1 < -2.40000000000000002e-254Initial program 60.2%
hypot-define99.0%
Simplified99.0%
if -2.40000000000000002e-254 < lambda1 Initial program 58.2%
hypot-define94.8%
Simplified94.8%
add-sqr-sqrt42.4%
pow242.4%
*-commutative42.4%
div-inv42.4%
metadata-eval42.4%
Applied egg-rr42.4%
*-commutative42.4%
+-commutative42.4%
distribute-rgt-in42.4%
cos-sum45.8%
Applied egg-rr45.8%
Taylor expanded in lambda1 around 0 39.8%
mul-1-neg39.8%
Simplified39.8%
Final simplification62.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 (<= lambda1 -1.95e+172)
(pow
(sqrt
(*
R_m
(hypot
(*
lambda1
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* 0.5 phi1)) (sin (* phi2 0.5)))))
(- 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 <= -1.95e+172) {
tmp = pow(sqrt((R_m * hypot((lambda1 * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (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 <= -1.95e+172) {
tmp = Math.pow(Math.sqrt((R_m * Math.hypot((lambda1 * ((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((0.5 * phi1)) * Math.sin((phi2 * 0.5))))), (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 <= -1.95e+172: tmp = math.pow(math.sqrt((R_m * math.hypot((lambda1 * ((math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))) - (math.sin((0.5 * phi1)) * math.sin((phi2 * 0.5))))), (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 <= -1.95e+172) tmp = sqrt(Float64(R_m * hypot(Float64(lambda1 * Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(0.5 * phi1)) * sin(Float64(phi2 * 0.5))))), 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 <= -1.95e+172) tmp = sqrt((R_m * hypot((lambda1 * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (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, -1.95e+172], N[Power[N[Sqrt[N[(R$95$m * N[Sqrt[N[(lambda1 * N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $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 -1.95 \cdot 10^{+172}:\\
\;\;\;\;{\left(\sqrt{R\_m \cdot \mathsf{hypot}\left(\lambda_1 \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(0.5 \cdot \phi_1\right) \cdot \sin \left(\phi_2 \cdot 0.5\right)\right), \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 < -1.94999999999999984e172Initial program 38.7%
hypot-define90.6%
Simplified90.6%
add-sqr-sqrt57.1%
pow257.1%
*-commutative57.1%
div-inv57.1%
metadata-eval57.1%
Applied egg-rr57.1%
*-commutative57.1%
+-commutative57.1%
distribute-rgt-in57.1%
cos-sum61.1%
Applied egg-rr61.1%
Taylor expanded in lambda1 around inf 61.1%
if -1.94999999999999984e172 < lambda1 Initial program 59.0%
hypot-define96.4%
Simplified96.4%
Final simplification92.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
(pow
(cbrt
(hypot
(*
(- lambda1 lambda2)
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* 0.5 phi1)) (sin (* phi2 0.5)))))
(- phi1 phi2)))
3.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 * (R_m * pow(cbrt(hypot(((lambda1 - lambda2) * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (phi1 - phi2))), 3.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 * (R_m * Math.pow(Math.cbrt(Math.hypot(((lambda1 - lambda2) * ((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((0.5 * phi1)) * Math.sin((phi2 * 0.5))))), (phi1 - phi2))), 3.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 * Float64(R_m * (cbrt(hypot(Float64(Float64(lambda1 - lambda2) * Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(0.5 * phi1)) * sin(Float64(phi2 * 0.5))))), Float64(phi1 - phi2))) ^ 3.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[(R$95$m * N[Power[N[Power[N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision], 1/3], $MachinePrecision], 3.0], $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 {\left(\sqrt[3]{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(0.5 \cdot \phi_1\right) \cdot \sin \left(\phi_2 \cdot 0.5\right)\right), \phi_1 - \phi_2\right)}\right)}^{3}\right)
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
expm1-log1p-u89.8%
*-commutative89.8%
div-inv89.8%
metadata-eval89.8%
Applied egg-rr89.8%
expm1-log1p-u95.7%
add-cube-cbrt94.5%
pow394.5%
*-commutative94.5%
Applied egg-rr94.5%
*-commutative45.1%
+-commutative45.1%
distribute-rgt-in45.1%
cos-sum47.4%
Applied egg-rr98.7%
Final simplification98.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
(pow
(sqrt
(*
(hypot
(*
(- lambda1 lambda2)
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* 0.5 phi1)) (sin (* phi2 0.5)))))
(- phi1 phi2))
R_m))
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((hypot(((lambda1 - lambda2) * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (phi1 - phi2)) * R_m)), 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((Math.hypot(((lambda1 - lambda2) * ((Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))) - (Math.sin((0.5 * phi1)) * Math.sin((phi2 * 0.5))))), (phi1 - phi2)) * R_m)), 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((math.hypot(((lambda1 - lambda2) * ((math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))) - (math.sin((0.5 * phi1)) * math.sin((phi2 * 0.5))))), (phi1 - phi2)) * R_m)), 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(hypot(Float64(Float64(lambda1 - lambda2) * Float64(Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))) - Float64(sin(Float64(0.5 * phi1)) * sin(Float64(phi2 * 0.5))))), Float64(phi1 - phi2)) * R_m)) ^ 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((hypot(((lambda1 - lambda2) * ((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((0.5 * phi1)) * sin((phi2 * 0.5))))), (phi1 - phi2)) * R_m)) ^ 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[(N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[(N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision] * R$95$m), $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{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right) - \sin \left(0.5 \cdot \phi_1\right) \cdot \sin \left(\phi_2 \cdot 0.5\right)\right), \phi_1 - \phi_2\right) \cdot R\_m}\right)}^{2}
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
add-sqr-sqrt45.1%
pow245.1%
*-commutative45.1%
div-inv45.1%
metadata-eval45.1%
Applied egg-rr45.1%
*-commutative45.1%
+-commutative45.1%
distribute-rgt-in45.1%
cos-sum47.4%
Applied egg-rr47.4%
Final simplification47.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 (<= phi2 4.7e-38)
(* R_m (hypot (* (- lambda1 lambda2) (cos (* 0.5 phi1))) (- 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 (phi2 <= 4.7e-38) {
tmp = R_m * hypot(((lambda1 - lambda2) * cos((0.5 * phi1))), (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 (phi2 <= 4.7e-38) {
tmp = R_m * Math.hypot(((lambda1 - lambda2) * Math.cos((0.5 * phi1))), (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 phi2 <= 4.7e-38: tmp = R_m * math.hypot(((lambda1 - lambda2) * math.cos((0.5 * phi1))), (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 (phi2 <= 4.7e-38) tmp = Float64(R_m * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(0.5 * phi1))), 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 (phi2 <= 4.7e-38) tmp = R_m * hypot(((lambda1 - lambda2) * cos((0.5 * phi1))), (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[phi2, 4.7e-38], N[(R$95$m * N[Sqrt[N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(0.5 * phi1), $MachinePrecision]], $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_2 \leq 4.7 \cdot 10^{-38}:\\
\;\;\;\;R\_m \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(0.5 \cdot \phi_1\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 phi2 < 4.69999999999999998e-38Initial program 58.4%
hypot-define98.3%
Simplified98.3%
Taylor expanded in phi2 around 0 94.4%
if 4.69999999999999998e-38 < phi2 Initial program 51.9%
hypot-define89.0%
Simplified89.0%
Taylor expanded in phi1 around 0 88.4%
Final simplification92.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 (<= lambda2 9.2e+144)
(fabs (* R_m (+ phi2 phi1)))
(fabs (* lambda2 (* R_m (cos (* 0.5 (+ phi2 phi1)))))))))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 <= 9.2e+144) {
tmp = fabs((R_m * (phi2 + phi1)));
} else {
tmp = fabs((lambda2 * (R_m * cos((0.5 * (phi2 + phi1))))));
}
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 (lambda2 <= 9.2d+144) then
tmp = abs((r_m * (phi2 + phi1)))
else
tmp = abs((lambda2 * (r_m * cos((0.5d0 * (phi2 + phi1))))))
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 (lambda2 <= 9.2e+144) {
tmp = Math.abs((R_m * (phi2 + phi1)));
} else {
tmp = Math.abs((lambda2 * (R_m * Math.cos((0.5 * (phi2 + phi1))))));
}
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 <= 9.2e+144: tmp = math.fabs((R_m * (phi2 + phi1))) else: tmp = math.fabs((lambda2 * (R_m * math.cos((0.5 * (phi2 + phi1)))))) 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 <= 9.2e+144) tmp = abs(Float64(R_m * Float64(phi2 + phi1))); else tmp = abs(Float64(lambda2 * Float64(R_m * cos(Float64(0.5 * Float64(phi2 + phi1)))))); 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 <= 9.2e+144) tmp = abs((R_m * (phi2 + phi1))); else tmp = abs((lambda2 * (R_m * cos((0.5 * (phi2 + phi1)))))); 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, 9.2e+144], N[Abs[N[(R$95$m * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[Abs[N[(lambda2 * N[(R$95$m * N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $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_2 \leq 9.2 \cdot 10^{+144}:\\
\;\;\;\;\left|R\_m \cdot \left(\phi_2 + \phi_1\right)\right|\\
\mathbf{else}:\\
\;\;\;\;\left|\lambda_2 \cdot \left(R\_m \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\right|\\
\end{array}
\end{array}
if lambda2 < 9.2000000000000006e144Initial program 61.2%
hypot-define96.7%
Simplified96.7%
Taylor expanded in phi2 around inf 30.1%
associate-*r/30.1%
mul-1-neg30.1%
*-commutative30.1%
Simplified30.1%
+-commutative30.1%
distribute-lft-in29.1%
add-sqr-sqrt14.9%
sqrt-unprod23.1%
sqr-neg23.1%
sqrt-unprod13.4%
add-sqr-sqrt28.2%
Applied egg-rr28.2%
Taylor expanded in phi2 around 0 27.9%
distribute-lft-in28.8%
Simplified28.8%
add-sqr-sqrt12.3%
sqrt-unprod24.7%
pow224.7%
*-commutative24.7%
Applied egg-rr24.7%
unpow224.7%
rem-sqrt-square30.3%
Simplified30.3%
if 9.2000000000000006e144 < lambda2 Initial program 33.5%
hypot-define90.8%
Simplified90.8%
Taylor expanded in lambda2 around inf 57.4%
*-commutative57.4%
*-commutative57.4%
*-commutative57.4%
*-commutative57.4%
+-commutative57.4%
Simplified57.4%
add-sqr-sqrt35.5%
sqrt-unprod32.5%
pow232.5%
*-commutative32.5%
associate-*l*32.4%
+-commutative32.4%
*-commutative32.4%
Applied egg-rr32.4%
unpow232.4%
rem-sqrt-square43.4%
Simplified43.4%
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 (* 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 56.5%
hypot-define95.7%
Simplified95.7%
Final simplification95.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 (hypot (* (- lambda1 lambda2) (cos (* 0.5 phi1))) (- 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((0.5 * phi1))), (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((0.5 * phi1))), (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((0.5 * phi1))), (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(0.5 * phi1))), 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((0.5 * phi1))), (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[(0.5 * phi1), $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(0.5 \cdot \phi_1\right), \phi_1 - \phi_2\right)\right)
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
Taylor expanded in phi2 around 0 90.0%
Final simplification90.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 (<= lambda2 9e+144)
(fabs (* R_m (+ phi2 phi1)))
(* (cos (* 0.5 phi1)) (* lambda2 R_m)))))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 <= 9e+144) {
tmp = fabs((R_m * (phi2 + phi1)));
} else {
tmp = cos((0.5 * phi1)) * (lambda2 * R_m);
}
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 (lambda2 <= 9d+144) then
tmp = abs((r_m * (phi2 + phi1)))
else
tmp = cos((0.5d0 * phi1)) * (lambda2 * r_m)
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 (lambda2 <= 9e+144) {
tmp = Math.abs((R_m * (phi2 + phi1)));
} else {
tmp = Math.cos((0.5 * phi1)) * (lambda2 * R_m);
}
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 <= 9e+144: tmp = math.fabs((R_m * (phi2 + phi1))) else: tmp = math.cos((0.5 * phi1)) * (lambda2 * R_m) 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 <= 9e+144) tmp = abs(Float64(R_m * Float64(phi2 + phi1))); else tmp = Float64(cos(Float64(0.5 * phi1)) * Float64(lambda2 * R_m)); 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 <= 9e+144) tmp = abs((R_m * (phi2 + phi1))); else tmp = cos((0.5 * phi1)) * (lambda2 * R_m); 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, 9e+144], N[Abs[N[(R$95$m * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[(lambda2 * R$95$m), $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 9 \cdot 10^{+144}:\\
\;\;\;\;\left|R\_m \cdot \left(\phi_2 + \phi_1\right)\right|\\
\mathbf{else}:\\
\;\;\;\;\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\lambda_2 \cdot R\_m\right)\\
\end{array}
\end{array}
if lambda2 < 8.99999999999999935e144Initial program 61.2%
hypot-define96.7%
Simplified96.7%
Taylor expanded in phi2 around inf 30.1%
associate-*r/30.1%
mul-1-neg30.1%
*-commutative30.1%
Simplified30.1%
+-commutative30.1%
distribute-lft-in29.1%
add-sqr-sqrt14.9%
sqrt-unprod23.1%
sqr-neg23.1%
sqrt-unprod13.4%
add-sqr-sqrt28.2%
Applied egg-rr28.2%
Taylor expanded in phi2 around 0 27.9%
distribute-lft-in28.8%
Simplified28.8%
add-sqr-sqrt12.3%
sqrt-unprod24.7%
pow224.7%
*-commutative24.7%
Applied egg-rr24.7%
unpow224.7%
rem-sqrt-square30.3%
Simplified30.3%
if 8.99999999999999935e144 < lambda2 Initial program 33.5%
hypot-define90.8%
Simplified90.8%
Taylor expanded in lambda2 around inf 57.4%
*-commutative57.4%
*-commutative57.4%
*-commutative57.4%
*-commutative57.4%
+-commutative57.4%
Simplified57.4%
Taylor expanded in phi2 around 0 50.1%
associate-*r*50.1%
Simplified50.1%
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 (<= R_m 5e+66)
(- (* phi2 R_m) (* phi1 R_m))
(* phi1 (- (* R_m (/ phi2 phi1)) R_m)))))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 (R_m <= 5e+66) {
tmp = (phi2 * R_m) - (phi1 * R_m);
} else {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
}
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 (r_m <= 5d+66) then
tmp = (phi2 * r_m) - (phi1 * r_m)
else
tmp = phi1 * ((r_m * (phi2 / phi1)) - r_m)
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 (R_m <= 5e+66) {
tmp = (phi2 * R_m) - (phi1 * R_m);
} else {
tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m);
}
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 R_m <= 5e+66: tmp = (phi2 * R_m) - (phi1 * R_m) else: tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m) 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 (R_m <= 5e+66) tmp = Float64(Float64(phi2 * R_m) - Float64(phi1 * R_m)); else tmp = Float64(phi1 * Float64(Float64(R_m * Float64(phi2 / phi1)) - R_m)); 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 (R_m <= 5e+66) tmp = (phi2 * R_m) - (phi1 * R_m); else tmp = phi1 * ((R_m * (phi2 / phi1)) - R_m); 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[R$95$m, 5e+66], N[(N[(phi2 * R$95$m), $MachinePrecision] - N[(phi1 * R$95$m), $MachinePrecision]), $MachinePrecision], N[(phi1 * N[(N[(R$95$m * N[(phi2 / phi1), $MachinePrecision]), $MachinePrecision] - R$95$m), $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}\;R\_m \leq 5 \cdot 10^{+66}:\\
\;\;\;\;\phi_2 \cdot R\_m - \phi_1 \cdot R\_m\\
\mathbf{else}:\\
\;\;\;\;\phi_1 \cdot \left(R\_m \cdot \frac{\phi_2}{\phi_1} - R\_m\right)\\
\end{array}
\end{array}
if R < 4.99999999999999991e66Initial program 48.9%
hypot-define94.9%
Simplified94.9%
Taylor expanded in phi2 around inf 27.8%
associate-*r/27.8%
mul-1-neg27.8%
*-commutative27.8%
Simplified27.8%
Taylor expanded in phi2 around 0 29.1%
+-commutative29.1%
mul-1-neg29.1%
*-commutative29.1%
unsub-neg29.1%
*-commutative29.1%
Simplified29.1%
if 4.99999999999999991e66 < R Initial program 97.9%
hypot-define100.0%
Simplified100.0%
Taylor expanded in phi2 around inf 28.4%
associate-*r/28.4%
mul-1-neg28.4%
*-commutative28.4%
Simplified28.4%
Taylor expanded in phi1 around inf 30.7%
neg-mul-130.7%
+-commutative30.7%
unsub-neg30.7%
associate-/l*33.2%
Simplified33.2%
Final simplification29.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 (<= R_m 7.6e+66)
(- (* phi2 R_m) (* phi1 R_m))
(* phi1 (- (* phi2 (/ R_m phi1)) R_m)))))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 (R_m <= 7.6e+66) {
tmp = (phi2 * R_m) - (phi1 * R_m);
} else {
tmp = phi1 * ((phi2 * (R_m / phi1)) - R_m);
}
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 (r_m <= 7.6d+66) then
tmp = (phi2 * r_m) - (phi1 * r_m)
else
tmp = phi1 * ((phi2 * (r_m / phi1)) - r_m)
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 (R_m <= 7.6e+66) {
tmp = (phi2 * R_m) - (phi1 * R_m);
} else {
tmp = phi1 * ((phi2 * (R_m / phi1)) - R_m);
}
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 R_m <= 7.6e+66: tmp = (phi2 * R_m) - (phi1 * R_m) else: tmp = phi1 * ((phi2 * (R_m / phi1)) - R_m) 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 (R_m <= 7.6e+66) tmp = Float64(Float64(phi2 * R_m) - Float64(phi1 * R_m)); else tmp = Float64(phi1 * Float64(Float64(phi2 * Float64(R_m / phi1)) - R_m)); 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 (R_m <= 7.6e+66) tmp = (phi2 * R_m) - (phi1 * R_m); else tmp = phi1 * ((phi2 * (R_m / phi1)) - R_m); 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[R$95$m, 7.6e+66], N[(N[(phi2 * R$95$m), $MachinePrecision] - N[(phi1 * R$95$m), $MachinePrecision]), $MachinePrecision], N[(phi1 * N[(N[(phi2 * N[(R$95$m / phi1), $MachinePrecision]), $MachinePrecision] - R$95$m), $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}\;R\_m \leq 7.6 \cdot 10^{+66}:\\
\;\;\;\;\phi_2 \cdot R\_m - \phi_1 \cdot R\_m\\
\mathbf{else}:\\
\;\;\;\;\phi_1 \cdot \left(\phi_2 \cdot \frac{R\_m}{\phi_1} - R\_m\right)\\
\end{array}
\end{array}
if R < 7.6000000000000004e66Initial program 48.9%
hypot-define94.9%
Simplified94.9%
Taylor expanded in phi2 around inf 27.8%
associate-*r/27.8%
mul-1-neg27.8%
*-commutative27.8%
Simplified27.8%
Taylor expanded in phi2 around 0 29.1%
+-commutative29.1%
mul-1-neg29.1%
*-commutative29.1%
unsub-neg29.1%
*-commutative29.1%
Simplified29.1%
if 7.6000000000000004e66 < R Initial program 97.9%
hypot-define100.0%
Simplified100.0%
Taylor expanded in phi1 around -inf 30.7%
mul-1-neg30.7%
distribute-rgt-neg-in30.7%
mul-1-neg30.7%
unsub-neg30.7%
*-commutative30.7%
associate-/l*35.7%
Simplified35.7%
distribute-rgt-neg-out35.7%
neg-sub035.7%
associate-*r/30.7%
Applied egg-rr30.7%
neg-sub030.7%
distribute-rgt-neg-in30.7%
sub-neg30.7%
associate-/l*35.7%
distribute-rgt-neg-out35.7%
distribute-neg-out35.7%
+-commutative35.7%
unsub-neg35.7%
distribute-rgt-neg-in35.7%
remove-double-neg35.7%
Simplified35.7%
Final simplification30.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 -2.9e+62) (* phi1 (- R_m)) (* phi2 R_m))))
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.9e+62) {
tmp = phi1 * -R_m;
} else {
tmp = phi2 * R_m;
}
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 <= (-2.9d+62)) then
tmp = phi1 * -r_m
else
tmp = phi2 * r_m
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 <= -2.9e+62) {
tmp = phi1 * -R_m;
} else {
tmp = phi2 * R_m;
}
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.9e+62: tmp = phi1 * -R_m else: tmp = phi2 * R_m 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.9e+62) tmp = Float64(phi1 * Float64(-R_m)); else tmp = Float64(phi2 * R_m); 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.9e+62) tmp = phi1 * -R_m; else tmp = phi2 * R_m; 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.9e+62], N[(phi1 * (-R$95$m)), $MachinePrecision], N[(phi2 * R$95$m), $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.9 \cdot 10^{+62}:\\
\;\;\;\;\phi_1 \cdot \left(-R\_m\right)\\
\mathbf{else}:\\
\;\;\;\;\phi_2 \cdot R\_m\\
\end{array}
\end{array}
if phi1 < -2.89999999999999984e62Initial program 33.7%
hypot-define91.9%
Simplified91.9%
Taylor expanded in phi1 around -inf 63.7%
mul-1-neg63.7%
*-commutative63.7%
distribute-rgt-neg-in63.7%
Simplified63.7%
if -2.89999999999999984e62 < phi1 Initial program 63.3%
hypot-define96.8%
Simplified96.8%
Taylor expanded in phi2 around inf 17.6%
*-commutative17.6%
Simplified17.6%
Final simplification28.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 (- (* phi2 R_m) (* phi1 R_m))))
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 * ((phi2 * R_m) - (phi1 * R_m));
}
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 * ((phi2 * r_m) - (phi1 * r_m))
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 * ((phi2 * R_m) - (phi1 * R_m));
}
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 * ((phi2 * R_m) - (phi1 * R_m))
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(Float64(phi2 * R_m) - Float64(phi1 * R_m))) 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 * ((phi2 * R_m) - (phi1 * R_m)); 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[(N[(phi2 * R$95$m), $MachinePrecision] - N[(phi1 * R$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \left(\phi_2 \cdot R\_m - \phi_1 \cdot R\_m\right)
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
Taylor expanded in phi2 around inf 27.9%
associate-*r/27.9%
mul-1-neg27.9%
*-commutative27.9%
Simplified27.9%
Taylor expanded in phi2 around 0 28.6%
+-commutative28.6%
mul-1-neg28.6%
*-commutative28.6%
unsub-neg28.6%
*-commutative28.6%
Simplified28.6%
Final simplification28.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 (* phi2 R_m)))
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 * (phi2 * R_m);
}
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 * (phi2 * r_m)
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 * (phi2 * R_m);
}
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 * (phi2 * R_m)
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(phi2 * R_m)) 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 * (phi2 * R_m); 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[(phi2 * R$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
R\_s \cdot \left(\phi_2 \cdot R\_m\right)
\end{array}
Initial program 56.5%
hypot-define95.7%
Simplified95.7%
Taylor expanded in phi2 around inf 16.5%
*-commutative16.5%
Simplified16.5%
Final simplification16.5%
herbie shell --seed 2024073
(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))))))