
(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 16 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}
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (* phi2 0.5)))
(t_1 (* (sin (* phi2 0.5)) (sin (* 0.5 phi1))))
(t_2 (* (cos (* 0.5 phi1)) t_0)))
(if (<= lambda1 -1e+121)
(*
R
(hypot
(- (* (- t_2 t_1) lambda1) (* lambda2 (cos (* 0.5 (+ phi2 phi1)))))
(- phi1 phi2)))
(* R (hypot (+ (* lambda1 t_0) (* lambda2 (- t_1 t_2))) (- phi1 phi2))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((phi2 * 0.5));
double t_1 = sin((phi2 * 0.5)) * sin((0.5 * phi1));
double t_2 = cos((0.5 * phi1)) * t_0;
double tmp;
if (lambda1 <= -1e+121) {
tmp = R * hypot((((t_2 - t_1) * lambda1) - (lambda2 * cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
} else {
tmp = R * hypot(((lambda1 * t_0) + (lambda2 * (t_1 - t_2))), (phi1 - phi2));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((phi2 * 0.5));
double t_1 = Math.sin((phi2 * 0.5)) * Math.sin((0.5 * phi1));
double t_2 = Math.cos((0.5 * phi1)) * t_0;
double tmp;
if (lambda1 <= -1e+121) {
tmp = R * Math.hypot((((t_2 - t_1) * lambda1) - (lambda2 * Math.cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
} else {
tmp = R * Math.hypot(((lambda1 * t_0) + (lambda2 * (t_1 - t_2))), (phi1 - phi2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((phi2 * 0.5)) t_1 = math.sin((phi2 * 0.5)) * math.sin((0.5 * phi1)) t_2 = math.cos((0.5 * phi1)) * t_0 tmp = 0 if lambda1 <= -1e+121: tmp = R * math.hypot((((t_2 - t_1) * lambda1) - (lambda2 * math.cos((0.5 * (phi2 + phi1))))), (phi1 - phi2)) else: tmp = R * math.hypot(((lambda1 * t_0) + (lambda2 * (t_1 - t_2))), (phi1 - phi2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(phi2 * 0.5)) t_1 = Float64(sin(Float64(phi2 * 0.5)) * sin(Float64(0.5 * phi1))) t_2 = Float64(cos(Float64(0.5 * phi1)) * t_0) tmp = 0.0 if (lambda1 <= -1e+121) tmp = Float64(R * hypot(Float64(Float64(Float64(t_2 - t_1) * lambda1) - Float64(lambda2 * cos(Float64(0.5 * Float64(phi2 + phi1))))), Float64(phi1 - phi2))); else tmp = Float64(R * hypot(Float64(Float64(lambda1 * t_0) + Float64(lambda2 * Float64(t_1 - t_2))), Float64(phi1 - phi2))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
t_0 = cos((phi2 * 0.5));
t_1 = sin((phi2 * 0.5)) * sin((0.5 * phi1));
t_2 = cos((0.5 * phi1)) * t_0;
tmp = 0.0;
if (lambda1 <= -1e+121)
tmp = R * hypot((((t_2 - t_1) * lambda1) - (lambda2 * cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
else
tmp = R * hypot(((lambda1 * t_0) + (lambda2 * (t_1 - t_2))), (phi1 - phi2));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision]}, If[LessEqual[lambda1, -1e+121], N[(R * N[Sqrt[N[(N[(N[(t$95$2 - t$95$1), $MachinePrecision] * lambda1), $MachinePrecision] - N[(lambda2 * N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R * N[Sqrt[N[(N[(lambda1 * t$95$0), $MachinePrecision] + N[(lambda2 * N[(t$95$1 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\phi_2 \cdot 0.5\right)\\
t_1 := \sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\\
t_2 := \cos \left(0.5 \cdot \phi_1\right) \cdot t\_0\\
\mathbf{if}\;\lambda_1 \leq -1 \cdot 10^{+121}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\left(t\_2 - t\_1\right) \cdot \lambda_1 - \lambda_2 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right), \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\lambda_1 \cdot t\_0 + \lambda_2 \cdot \left(t\_1 - t\_2\right), \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if lambda1 < -1.00000000000000004e121Initial program 45.7%
hypot-define88.6%
Simplified88.6%
*-commutative88.6%
sub-neg88.6%
distribute-lft-in88.6%
div-inv88.6%
metadata-eval88.6%
div-inv88.6%
metadata-eval88.6%
Applied egg-rr88.6%
*-commutative88.6%
+-commutative88.6%
distribute-lft-in88.6%
cos-sum99.8%
*-commutative99.8%
*-commutative99.8%
*-commutative99.8%
*-commutative99.8%
Applied egg-rr99.8%
if -1.00000000000000004e121 < lambda1 Initial program 63.6%
hypot-define96.3%
Simplified96.3%
*-commutative96.3%
sub-neg96.3%
distribute-lft-in96.3%
div-inv96.3%
metadata-eval96.3%
div-inv96.3%
metadata-eval96.3%
Applied egg-rr96.3%
*-commutative96.3%
+-commutative96.3%
distribute-lft-in96.3%
cos-sum97.7%
*-commutative97.7%
*-commutative97.7%
*-commutative97.7%
*-commutative97.7%
Applied egg-rr98.5%
Taylor expanded in phi1 around 0 95.1%
Final simplification95.7%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(pow
(cbrt
(*
R
(hypot
(*
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* phi2 0.5)) (sin (* 0.5 phi1))))
(- lambda1 lambda2))
(- phi1 phi2))))
3.0))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return pow(cbrt((R * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * (lambda1 - lambda2)), (phi1 - phi2)))), 3.0);
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.pow(Math.cbrt((R * 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)))), 3.0);
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return cbrt(Float64(R * 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)))) ^ 3.0 end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[Power[N[Power[N[(R * 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], 1/3], $MachinePrecision], 3.0], $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
{\left(\sqrt[3]{R \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)}^{3}
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
add-cube-cbrt94.0%
pow394.0%
*-commutative94.0%
div-inv94.0%
metadata-eval94.0%
Applied egg-rr94.0%
*-commutative95.3%
+-commutative95.3%
distribute-lft-in95.3%
cos-sum98.0%
*-commutative98.0%
*-commutative98.0%
*-commutative98.0%
*-commutative98.0%
Applied egg-rr98.5%
Final simplification98.5%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (* phi2 0.5)))
(t_1 (* (cos (* 0.5 phi1)) t_0))
(t_2 (* (sin (* phi2 0.5)) (sin (* 0.5 phi1)))))
(if (<= lambda1 -9.2e+188)
(+
(+ (* R (hypot (* (- t_1 t_2) (+ lambda1 lambda2)) (- phi1 phi2))) 1.0)
-1.0)
(* R (hypot (+ (* lambda1 t_0) (* lambda2 (- t_2 t_1))) (- phi1 phi2))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((phi2 * 0.5));
double t_1 = cos((0.5 * phi1)) * t_0;
double t_2 = sin((phi2 * 0.5)) * sin((0.5 * phi1));
double tmp;
if (lambda1 <= -9.2e+188) {
tmp = ((R * hypot(((t_1 - t_2) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0;
} else {
tmp = R * hypot(((lambda1 * t_0) + (lambda2 * (t_2 - t_1))), (phi1 - phi2));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((phi2 * 0.5));
double t_1 = Math.cos((0.5 * phi1)) * t_0;
double t_2 = Math.sin((phi2 * 0.5)) * Math.sin((0.5 * phi1));
double tmp;
if (lambda1 <= -9.2e+188) {
tmp = ((R * Math.hypot(((t_1 - t_2) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0;
} else {
tmp = R * Math.hypot(((lambda1 * t_0) + (lambda2 * (t_2 - t_1))), (phi1 - phi2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((phi2 * 0.5)) t_1 = math.cos((0.5 * phi1)) * t_0 t_2 = math.sin((phi2 * 0.5)) * math.sin((0.5 * phi1)) tmp = 0 if lambda1 <= -9.2e+188: tmp = ((R * math.hypot(((t_1 - t_2) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0 else: tmp = R * math.hypot(((lambda1 * t_0) + (lambda2 * (t_2 - t_1))), (phi1 - phi2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(phi2 * 0.5)) t_1 = Float64(cos(Float64(0.5 * phi1)) * t_0) t_2 = Float64(sin(Float64(phi2 * 0.5)) * sin(Float64(0.5 * phi1))) tmp = 0.0 if (lambda1 <= -9.2e+188) tmp = Float64(Float64(Float64(R * hypot(Float64(Float64(t_1 - t_2) * Float64(lambda1 + lambda2)), Float64(phi1 - phi2))) + 1.0) + -1.0); else tmp = Float64(R * hypot(Float64(Float64(lambda1 * t_0) + Float64(lambda2 * Float64(t_2 - t_1))), Float64(phi1 - phi2))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
t_0 = cos((phi2 * 0.5));
t_1 = cos((0.5 * phi1)) * t_0;
t_2 = sin((phi2 * 0.5)) * sin((0.5 * phi1));
tmp = 0.0;
if (lambda1 <= -9.2e+188)
tmp = ((R * hypot(((t_1 - t_2) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0;
else
tmp = R * hypot(((lambda1 * t_0) + (lambda2 * (t_2 - t_1))), (phi1 - phi2));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda1, -9.2e+188], N[(N[(N[(R * N[Sqrt[N[(N[(t$95$1 - t$95$2), $MachinePrecision] * N[(lambda1 + lambda2), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] + -1.0), $MachinePrecision], N[(R * N[Sqrt[N[(N[(lambda1 * t$95$0), $MachinePrecision] + N[(lambda2 * N[(t$95$2 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\phi_2 \cdot 0.5\right)\\
t_1 := \cos \left(0.5 \cdot \phi_1\right) \cdot t\_0\\
t_2 := \sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\\
\mathbf{if}\;\lambda_1 \leq -9.2 \cdot 10^{+188}:\\
\;\;\;\;\left(R \cdot \mathsf{hypot}\left(\left(t\_1 - t\_2\right) \cdot \left(\lambda_1 + \lambda_2\right), \phi_1 - \phi_2\right) + 1\right) + -1\\
\mathbf{else}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\lambda_1 \cdot t\_0 + \lambda_2 \cdot \left(t\_2 - t\_1\right), \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if lambda1 < -9.20000000000000046e188Initial program 36.9%
hypot-define86.1%
Simplified86.1%
expm1-log1p-u48.4%
expm1-undefine48.2%
*-commutative48.2%
div-inv48.2%
metadata-eval48.2%
Applied egg-rr48.2%
log1p-undefine48.2%
rem-exp-log85.9%
+-commutative85.9%
sub-neg85.9%
add-sqr-sqrt54.1%
sqrt-unprod75.5%
sqr-neg75.5%
sqrt-unprod31.7%
add-sqr-sqrt85.9%
+-commutative85.9%
Applied egg-rr85.9%
*-commutative86.1%
+-commutative86.1%
distribute-lft-in86.1%
cos-sum99.7%
*-commutative99.7%
*-commutative99.7%
*-commutative99.7%
*-commutative99.7%
Applied egg-rr99.5%
if -9.20000000000000046e188 < lambda1 Initial program 63.5%
hypot-define96.2%
Simplified96.2%
*-commutative96.2%
sub-neg96.2%
distribute-lft-in96.2%
div-inv96.2%
metadata-eval96.2%
div-inv96.2%
metadata-eval96.2%
Applied egg-rr96.2%
*-commutative96.2%
+-commutative96.2%
distribute-lft-in96.2%
cos-sum97.8%
*-commutative97.8%
*-commutative97.8%
*-commutative97.8%
*-commutative97.8%
Applied egg-rr98.2%
Taylor expanded in phi1 around 0 94.6%
Final simplification95.0%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R
(hypot
(+
(*
lambda2
(-
(* (sin (* phi2 0.5)) (sin (* 0.5 phi1)))
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))))
(* lambda1 (cos (* 0.5 (+ phi2 phi1)))))
(- phi1 phi2))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * hypot(((lambda2 * ((sin((phi2 * 0.5)) * sin((0.5 * phi1))) - (cos((0.5 * phi1)) * cos((phi2 * 0.5))))) + (lambda1 * cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * Math.hypot(((lambda2 * ((Math.sin((phi2 * 0.5)) * Math.sin((0.5 * phi1))) - (Math.cos((0.5 * phi1)) * Math.cos((phi2 * 0.5))))) + (lambda1 * Math.cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * math.hypot(((lambda2 * ((math.sin((phi2 * 0.5)) * math.sin((0.5 * phi1))) - (math.cos((0.5 * phi1)) * math.cos((phi2 * 0.5))))) + (lambda1 * math.cos((0.5 * (phi2 + phi1))))), (phi1 - phi2))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * hypot(Float64(Float64(lambda2 * Float64(Float64(sin(Float64(phi2 * 0.5)) * sin(Float64(0.5 * phi1))) - Float64(cos(Float64(0.5 * phi1)) * cos(Float64(phi2 * 0.5))))) + Float64(lambda1 * cos(Float64(0.5 * Float64(phi2 + phi1))))), Float64(phi1 - phi2))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * hypot(((lambda2 * ((sin((phi2 * 0.5)) * sin((0.5 * phi1))) - (cos((0.5 * phi1)) * cos((phi2 * 0.5))))) + (lambda1 * cos((0.5 * (phi2 + phi1))))), (phi1 - phi2));
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[Sqrt[N[(N[(lambda2 * N[(N[(N[Sin[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(lambda1 * N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \mathsf{hypot}\left(\lambda_2 \cdot \left(\sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(0.5 \cdot \phi_1\right) - \cos \left(0.5 \cdot \phi_1\right) \cdot \cos \left(\phi_2 \cdot 0.5\right)\right) + \lambda_1 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right), \phi_1 - \phi_2\right)
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
*-commutative95.3%
sub-neg95.3%
distribute-lft-in95.3%
div-inv95.3%
metadata-eval95.3%
div-inv95.3%
metadata-eval95.3%
Applied egg-rr95.3%
*-commutative95.3%
+-commutative95.3%
distribute-lft-in95.3%
cos-sum98.0%
*-commutative98.0%
*-commutative98.0%
*-commutative98.0%
*-commutative98.0%
Applied egg-rr97.2%
Final simplification97.2%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= (- lambda1 lambda2) -3e+185)
(+
(+
(*
R
(hypot
(*
(-
(* (cos (* 0.5 phi1)) (cos (* phi2 0.5)))
(* (sin (* phi2 0.5)) (sin (* 0.5 phi1))))
(+ lambda1 lambda2))
(- phi1 phi2)))
1.0)
-1.0)
(*
R
(hypot
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2.0)))
(- phi1 phi2)))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= -3e+185) {
tmp = ((R * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0;
} else {
tmp = R * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= -3e+185) {
tmp = ((R * 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))) + 1.0) + -1.0;
} else {
tmp = R * Math.hypot(((lambda1 - lambda2) * Math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if (lambda1 - lambda2) <= -3e+185: tmp = ((R * 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))) + 1.0) + -1.0 else: tmp = R * math.hypot(((lambda1 - lambda2) * math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (Float64(lambda1 - lambda2) <= -3e+185) tmp = Float64(Float64(Float64(R * 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))) + 1.0) + -1.0); else tmp = Float64(R * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi2 + phi1) / 2.0))), Float64(phi1 - phi2))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if ((lambda1 - lambda2) <= -3e+185)
tmp = ((R * hypot((((cos((0.5 * phi1)) * cos((phi2 * 0.5))) - (sin((phi2 * 0.5)) * sin((0.5 * phi1)))) * (lambda1 + lambda2)), (phi1 - phi2))) + 1.0) + -1.0;
else
tmp = R * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -3e+185], N[(N[(N[(R * 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] + 1.0), $MachinePrecision] + -1.0), $MachinePrecision], N[(R * 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]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -3 \cdot 10^{+185}:\\
\;\;\;\;\left(R \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) + 1\right) + -1\\
\mathbf{else}:\\
\;\;\;\;R \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 (-.f64 lambda1 lambda2) < -2.99999999999999994e185Initial program 39.9%
hypot-define85.7%
Simplified85.7%
expm1-log1p-u58.4%
expm1-undefine55.8%
*-commutative55.8%
div-inv55.8%
metadata-eval55.8%
Applied egg-rr55.8%
log1p-undefine55.8%
rem-exp-log83.1%
+-commutative83.1%
sub-neg83.1%
add-sqr-sqrt25.3%
sqrt-unprod59.6%
sqr-neg59.6%
sqrt-unprod57.7%
add-sqr-sqrt83.1%
+-commutative83.1%
Applied egg-rr83.1%
*-commutative85.7%
+-commutative85.7%
distribute-lft-in85.7%
cos-sum92.6%
*-commutative92.6%
*-commutative92.6%
*-commutative92.6%
*-commutative92.6%
Applied egg-rr97.1%
if -2.99999999999999994e185 < (-.f64 lambda1 lambda2) Initial program 65.4%
hypot-define97.2%
Simplified97.2%
Final simplification97.2%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (let* ((t_0 (cos (* 0.5 (+ phi2 phi1))))) (* R (hypot (- (* lambda1 t_0) (* lambda2 t_0)) (- phi1 phi2)))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((0.5 * (phi2 + phi1)));
return R * hypot(((lambda1 * t_0) - (lambda2 * t_0)), (phi1 - phi2));
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((0.5 * (phi2 + phi1)));
return R * Math.hypot(((lambda1 * t_0) - (lambda2 * t_0)), (phi1 - phi2));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((0.5 * (phi2 + phi1))) return R * math.hypot(((lambda1 * t_0) - (lambda2 * t_0)), (phi1 - phi2))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(0.5 * Float64(phi2 + phi1))) return Float64(R * hypot(Float64(Float64(lambda1 * t_0) - Float64(lambda2 * t_0)), Float64(phi1 - phi2))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
t_0 = cos((0.5 * (phi2 + phi1)));
tmp = R * hypot(((lambda1 * t_0) - (lambda2 * t_0)), (phi1 - phi2));
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, N[(R * N[Sqrt[N[(N[(lambda1 * t$95$0), $MachinePrecision] - N[(lambda2 * t$95$0), $MachinePrecision]), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\\
R \cdot \mathsf{hypot}\left(\lambda_1 \cdot t\_0 - \lambda_2 \cdot t\_0, \phi_1 - \phi_2\right)
\end{array}
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
*-commutative95.3%
sub-neg95.3%
distribute-lft-in95.3%
div-inv95.3%
metadata-eval95.3%
div-inv95.3%
metadata-eval95.3%
Applied egg-rr95.3%
Final simplification95.3%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= phi2 7.2e-124) (* R (hypot phi1 (* (cos (* 0.5 phi1)) (- lambda1 lambda2)))) (* R (hypot (- lambda1 lambda2) (- phi1 phi2)))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 7.2e-124) {
tmp = R * hypot(phi1, (cos((0.5 * phi1)) * (lambda1 - lambda2)));
} else {
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 7.2e-124) {
tmp = R * Math.hypot(phi1, (Math.cos((0.5 * phi1)) * (lambda1 - lambda2)));
} else {
tmp = R * Math.hypot((lambda1 - lambda2), (phi1 - phi2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if phi2 <= 7.2e-124: tmp = R * math.hypot(phi1, (math.cos((0.5 * phi1)) * (lambda1 - lambda2))) else: tmp = R * math.hypot((lambda1 - lambda2), (phi1 - phi2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 7.2e-124) tmp = Float64(R * hypot(phi1, Float64(cos(Float64(0.5 * phi1)) * Float64(lambda1 - lambda2)))); else tmp = Float64(R * hypot(Float64(lambda1 - lambda2), Float64(phi1 - phi2))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi2 <= 7.2e-124)
tmp = R * hypot(phi1, (cos((0.5 * phi1)) * (lambda1 - lambda2)));
else
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi2, 7.2e-124], N[(R * N[Sqrt[phi1 ^ 2 + N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R * N[Sqrt[N[(lambda1 - lambda2), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq 7.2 \cdot 10^{-124}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\phi_1, \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\lambda_1 - \lambda_2, \phi_1 - \phi_2\right)\\
\end{array}
\end{array}
if phi2 < 7.20000000000000019e-124Initial program 67.7%
hypot-define97.6%
Simplified97.6%
Taylor expanded in phi2 around 0 57.8%
+-commutative57.8%
unpow257.8%
unpow257.8%
unpow257.8%
unswap-sqr57.8%
hypot-define82.8%
Simplified82.8%
if 7.20000000000000019e-124 < phi2 Initial program 49.6%
hypot-define91.1%
Simplified91.1%
Taylor expanded in phi1 around 0 76.3%
associate-*r*76.3%
Simplified76.3%
Taylor expanded in phi2 around 0 77.1%
Final simplification80.8%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= phi1 -1.15e-19) (* R (hypot phi1 (* (cos (* 0.5 phi1)) (- lambda1 lambda2)))) (* R (hypot phi2 (* (- lambda1 lambda2) (cos (* phi2 0.5)))))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.15e-19) {
tmp = R * hypot(phi1, (cos((0.5 * phi1)) * (lambda1 - lambda2)));
} else {
tmp = R * hypot(phi2, ((lambda1 - lambda2) * cos((phi2 * 0.5))));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.15e-19) {
tmp = R * Math.hypot(phi1, (Math.cos((0.5 * phi1)) * (lambda1 - lambda2)));
} else {
tmp = R * Math.hypot(phi2, ((lambda1 - lambda2) * Math.cos((phi2 * 0.5))));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -1.15e-19: tmp = R * math.hypot(phi1, (math.cos((0.5 * phi1)) * (lambda1 - lambda2))) else: tmp = R * math.hypot(phi2, ((lambda1 - lambda2) * math.cos((phi2 * 0.5)))) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -1.15e-19) tmp = Float64(R * hypot(phi1, Float64(cos(Float64(0.5 * phi1)) * Float64(lambda1 - lambda2)))); else tmp = Float64(R * hypot(phi2, Float64(Float64(lambda1 - lambda2) * cos(Float64(phi2 * 0.5))))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi1 <= -1.15e-19)
tmp = R * hypot(phi1, (cos((0.5 * phi1)) * (lambda1 - lambda2)));
else
tmp = R * hypot(phi2, ((lambda1 - lambda2) * cos((phi2 * 0.5))));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -1.15e-19], N[(R * N[Sqrt[phi1 ^ 2 + N[(N[Cos[N[(0.5 * phi1), $MachinePrecision]], $MachinePrecision] * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(R * N[Sqrt[phi2 ^ 2 + N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(phi2 * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.15 \cdot 10^{-19}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\phi_1, \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\phi_2, \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\phi_2 \cdot 0.5\right)\right)\\
\end{array}
\end{array}
if phi1 < -1.1499999999999999e-19Initial program 56.9%
hypot-define86.8%
Simplified86.8%
Taylor expanded in phi2 around 0 51.0%
+-commutative51.0%
unpow251.0%
unpow251.0%
unpow251.0%
unswap-sqr51.0%
hypot-define77.3%
Simplified77.3%
if -1.1499999999999999e-19 < phi1 Initial program 63.0%
hypot-define98.6%
Simplified98.6%
Taylor expanded in phi1 around 0 53.7%
+-commutative53.7%
unpow253.7%
unpow253.7%
unpow253.7%
unswap-sqr53.8%
hypot-define74.5%
Simplified74.5%
Final simplification75.2%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* R (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2.0))) (- phi1 phi2))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * Math.hypot(((lambda1 - lambda2) * Math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * math.hypot(((lambda1 - lambda2) * math.cos(((phi2 + phi1) / 2.0))), (phi1 - phi2))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * hypot(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi2 + phi1) / 2.0))), Float64(phi1 - phi2))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * hypot(((lambda1 - lambda2) * cos(((phi2 + phi1) / 2.0))), (phi1 - phi2));
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * 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]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \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}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
Final simplification95.3%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= lambda2 1.85e+275) (* R (hypot (- lambda1 lambda2) (- phi1 phi2))) (* lambda2 (* R (cos (* 0.5 (+ phi2 phi1)))))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1.85e+275) {
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
} else {
tmp = lambda2 * (R * cos((0.5 * (phi2 + phi1))));
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1.85e+275) {
tmp = R * Math.hypot((lambda1 - lambda2), (phi1 - phi2));
} else {
tmp = lambda2 * (R * Math.cos((0.5 * (phi2 + phi1))));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 1.85e+275: tmp = R * math.hypot((lambda1 - lambda2), (phi1 - phi2)) else: tmp = lambda2 * (R * math.cos((0.5 * (phi2 + phi1)))) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 1.85e+275) tmp = Float64(R * hypot(Float64(lambda1 - lambda2), Float64(phi1 - phi2))); else tmp = Float64(lambda2 * Float64(R * cos(Float64(0.5 * Float64(phi2 + phi1))))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda2 <= 1.85e+275)
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
else
tmp = lambda2 * (R * cos((0.5 * (phi2 + phi1))));
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 1.85e+275], N[(R * N[Sqrt[N[(lambda1 - lambda2), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(lambda2 * N[(R * N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 1.85 \cdot 10^{+275}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\lambda_1 - \lambda_2, \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;\lambda_2 \cdot \left(R \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\\
\end{array}
\end{array}
if lambda2 < 1.8500000000000001e275Initial program 61.5%
hypot-define95.2%
Simplified95.2%
Taylor expanded in phi1 around 0 81.4%
associate-*r*81.4%
Simplified81.4%
Taylor expanded in phi2 around 0 83.9%
if 1.8500000000000001e275 < lambda2 Initial program 52.1%
hypot-define99.5%
Simplified99.5%
Taylor expanded in lambda2 around inf 85.2%
*-commutative85.2%
+-commutative85.2%
Simplified85.2%
pow185.2%
associate-*l*85.2%
Applied egg-rr85.2%
unpow185.2%
+-commutative85.2%
Simplified85.2%
Final simplification83.9%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= lambda2 1.65e+275) (* R (hypot (- lambda1 lambda2) (- phi1 phi2))) (* (cos (* 0.5 (+ phi2 phi1))) (* R lambda2))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1.65e+275) {
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
} else {
tmp = cos((0.5 * (phi2 + phi1))) * (R * lambda2);
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 1.65e+275) {
tmp = R * Math.hypot((lambda1 - lambda2), (phi1 - phi2));
} else {
tmp = Math.cos((0.5 * (phi2 + phi1))) * (R * lambda2);
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 1.65e+275: tmp = R * math.hypot((lambda1 - lambda2), (phi1 - phi2)) else: tmp = math.cos((0.5 * (phi2 + phi1))) * (R * lambda2) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 1.65e+275) tmp = Float64(R * hypot(Float64(lambda1 - lambda2), Float64(phi1 - phi2))); else tmp = Float64(cos(Float64(0.5 * Float64(phi2 + phi1))) * Float64(R * lambda2)); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda2 <= 1.65e+275)
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
else
tmp = cos((0.5 * (phi2 + phi1))) * (R * lambda2);
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 1.65e+275], N[(R * N[Sqrt[N[(lambda1 - lambda2), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(N[Cos[N[(0.5 * N[(phi2 + phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[(R * lambda2), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 1.65 \cdot 10^{+275}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\lambda_1 - \lambda_2, \phi_1 - \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot \left(R \cdot \lambda_2\right)\\
\end{array}
\end{array}
if lambda2 < 1.65000000000000011e275Initial program 61.5%
hypot-define95.2%
Simplified95.2%
Taylor expanded in phi1 around 0 81.4%
associate-*r*81.4%
Simplified81.4%
Taylor expanded in phi2 around 0 83.9%
if 1.65000000000000011e275 < lambda2 Initial program 52.1%
hypot-define99.5%
Simplified99.5%
Taylor expanded in lambda2 around inf 85.2%
*-commutative85.2%
+-commutative85.2%
Simplified85.2%
Taylor expanded in lambda2 around 0 85.2%
associate-*r*85.4%
Simplified85.4%
Final simplification83.9%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= phi2 6.2e+25) (* R (hypot phi1 (- lambda1 lambda2))) (- (* R phi2) (* R phi1))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 6.2e+25) {
tmp = R * hypot(phi1, (lambda1 - lambda2));
} else {
tmp = (R * phi2) - (R * phi1);
}
return tmp;
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 6.2e+25) {
tmp = R * Math.hypot(phi1, (lambda1 - lambda2));
} else {
tmp = (R * phi2) - (R * phi1);
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if phi2 <= 6.2e+25: tmp = R * math.hypot(phi1, (lambda1 - lambda2)) else: tmp = (R * phi2) - (R * phi1) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 6.2e+25) tmp = Float64(R * hypot(phi1, Float64(lambda1 - lambda2))); else tmp = Float64(Float64(R * phi2) - Float64(R * phi1)); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi2 <= 6.2e+25)
tmp = R * hypot(phi1, (lambda1 - lambda2));
else
tmp = (R * phi2) - (R * phi1);
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi2, 6.2e+25], N[(R * N[Sqrt[phi1 ^ 2 + N[(lambda1 - lambda2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision], N[(N[(R * phi2), $MachinePrecision] - N[(R * phi1), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq 6.2 \cdot 10^{+25}:\\
\;\;\;\;R \cdot \mathsf{hypot}\left(\phi_1, \lambda_1 - \lambda_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \phi_2 - R \cdot \phi_1\\
\end{array}
\end{array}
if phi2 < 6.1999999999999996e25Initial program 65.5%
hypot-define97.9%
Simplified97.9%
Taylor expanded in phi1 around 0 82.2%
associate-*r*82.2%
Simplified82.2%
Taylor expanded in phi2 around 0 51.9%
unpow251.9%
unpow251.9%
hypot-define72.9%
Simplified72.9%
if 6.1999999999999996e25 < phi2 Initial program 48.3%
hypot-define87.1%
Simplified87.1%
Taylor expanded in phi1 around -inf 62.7%
+-commutative62.7%
mul-1-neg62.7%
unsub-neg62.7%
*-commutative62.7%
*-commutative62.7%
Simplified62.7%
Final simplification70.5%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* R (hypot (- lambda1 lambda2) (- phi1 phi2))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * hypot((lambda1 - lambda2), (phi1 - phi2));
}
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * Math.hypot((lambda1 - lambda2), (phi1 - phi2));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * math.hypot((lambda1 - lambda2), (phi1 - phi2))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * hypot(Float64(lambda1 - lambda2), Float64(phi1 - phi2))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * hypot((lambda1 - lambda2), (phi1 - phi2));
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[Sqrt[N[(lambda1 - lambda2), $MachinePrecision] ^ 2 + N[(phi1 - phi2), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \mathsf{hypot}\left(\lambda_1 - \lambda_2, \phi_1 - \phi_2\right)
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
Taylor expanded in phi1 around 0 81.4%
associate-*r*81.4%
Simplified81.4%
Taylor expanded in phi2 around 0 83.3%
Final simplification83.3%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= phi1 -1.2e+32) (* R (- phi1)) (* R phi2)))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.2e+32) {
tmp = R * -phi1;
} else {
tmp = R * phi2;
}
return tmp;
}
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
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) :: tmp
if (phi1 <= (-1.2d+32)) then
tmp = r * -phi1
else
tmp = r * phi2
end if
code = tmp
end function
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.2e+32) {
tmp = R * -phi1;
} else {
tmp = R * phi2;
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -1.2e+32: tmp = R * -phi1 else: tmp = R * phi2 return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -1.2e+32) tmp = Float64(R * Float64(-phi1)); else tmp = Float64(R * phi2); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi1 <= -1.2e+32)
tmp = R * -phi1;
else
tmp = R * phi2;
end
tmp_2 = tmp;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -1.2e+32], N[(R * (-phi1)), $MachinePrecision], N[(R * phi2), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.2 \cdot 10^{+32}:\\
\;\;\;\;R \cdot \left(-\phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \phi_2\\
\end{array}
\end{array}
if phi1 < -1.19999999999999996e32Initial program 56.7%
hypot-define86.7%
Simplified86.7%
Taylor expanded in phi1 around -inf 60.3%
mul-1-neg60.3%
*-commutative60.3%
distribute-rgt-neg-in60.3%
Simplified60.3%
if -1.19999999999999996e32 < phi1 Initial program 62.7%
hypot-define97.9%
Simplified97.9%
Taylor expanded in phi2 around inf 20.7%
*-commutative20.7%
Simplified20.7%
Final simplification29.9%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (- (* R phi2) (* R phi1)))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return (R * phi2) - (R * phi1);
}
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
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
code = (r * phi2) - (r * phi1)
end function
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return (R * phi2) - (R * phi1);
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return (R * phi2) - (R * phi1)
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(Float64(R * phi2) - Float64(R * phi1)) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = (R * phi2) - (R * phi1);
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[(R * phi2), $MachinePrecision] - N[(R * phi1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \phi_2 - R \cdot \phi_1
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
Taylor expanded in phi1 around -inf 28.8%
+-commutative28.8%
mul-1-neg28.8%
unsub-neg28.8%
*-commutative28.8%
*-commutative28.8%
Simplified28.8%
Final simplification28.8%
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* R phi2))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * phi2;
}
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
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
code = r * phi2
end function
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * phi2;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * phi2
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * phi2) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * phi2;
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * phi2), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\\\
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \phi_2
\end{array}
Initial program 61.3%
hypot-define95.3%
Simplified95.3%
Taylor expanded in phi2 around inf 17.3%
*-commutative17.3%
Simplified17.3%
Final simplification17.3%
herbie shell --seed 2024046
(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))))))