
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
(acos
(+
(* (sin phi1) (sin phi2))
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
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 = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 32 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
(acos
(+
(* (sin phi1) (sin phi2))
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
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 = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\end{array}
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
(*
(acos
(fma
(* (sin lambda1) (* (sin lambda2) (cos phi1)))
(cos phi2)
(fma
(sin phi2)
(sin phi1)
(* (cos lambda2) (* (cos lambda1) (* (cos phi1) (cos phi2)))))))
R))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(fma((sin(lambda1) * (sin(lambda2) * cos(phi1))), cos(phi2), fma(sin(phi2), sin(phi1), (cos(lambda2) * (cos(lambda1) * (cos(phi1) * cos(phi2))))))) * R;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(fma(Float64(sin(lambda1) * Float64(sin(lambda2) * cos(phi1))), cos(phi2), fma(sin(phi2), sin(phi1), Float64(cos(lambda2) * Float64(cos(lambda1) * Float64(cos(phi1) * cos(phi2))))))) * R) end
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[ArcCos[N[(N[(N[Sin[lambda1], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_1 \cdot \left(\sin \lambda_2 \cdot \cos \phi_1\right), \cos \phi_2, \mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right)\right)\right) \cdot R
\end{array}
Initial program 72.9%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6472.9
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6472.9
Applied rewrites72.9%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
+-commutativeN/A
lower-+.f6494.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6494.0
Applied rewrites94.0%
Applied rewrites94.0%
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
(acos
(+
(* (sin phi2) (sin phi1))
(*
(* (cos phi1) (cos phi2))
(fma (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2))))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda1) * sin(lambda2))))));
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda1) * sin(lambda2))))))) end
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[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)
\end{array}
Initial program 72.9%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6494.0
Applied rewrites94.0%
Final simplification94.0%
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
(acos
(fma
(sin phi2)
(sin phi1)
(*
(cos phi1)
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(fma(sin(phi2), sin(phi1), (cos(phi1) * (cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))))));
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(fma(sin(phi2), sin(phi1), Float64(cos(phi1) * Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))))) end
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[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\right)
\end{array}
Initial program 72.9%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6472.9
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6472.9
Applied rewrites72.9%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
+-commutativeN/A
lift-fma.f6494.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6494.0
Applied rewrites94.0%
Final simplification94.0%
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 (- lambda1 lambda2)))
(t_1 (* (sin phi2) (sin phi1)))
(t_2
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2)))))
(if (<= phi2 -0.0018)
(* R (acos (+ t_1 (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 1.9e-5)
(*
R
(acos
(fma
t_2
(* (cos phi1) (fma phi2 (* phi2 -0.5) 1.0))
(* phi2 (sin phi1)))))
(if (<= phi2 1.6e+72)
(* R (acos (+ t_1 (* (cos phi2) t_2))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_0))))
(- R))))))))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((lambda1 - lambda2));
double t_1 = sin(phi2) * sin(phi1);
double t_2 = fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)));
double tmp;
if (phi2 <= -0.0018) {
tmp = R * acos((t_1 + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 1.9e-5) {
tmp = R * acos(fma(t_2, (cos(phi1) * fma(phi2, (phi2 * -0.5), 1.0)), (phi2 * sin(phi1))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((t_1 + (cos(phi2) * t_2)));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_0)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(sin(phi2) * sin(phi1)) t_2 = fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2))) tmp = 0.0 if (phi2 <= -0.0018) tmp = Float64(R * acos(Float64(t_1 + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 1.9e-5) tmp = Float64(R * acos(fma(t_2, Float64(cos(phi1) * fma(phi2, Float64(phi2 * -0.5), 1.0)), Float64(phi2 * sin(phi1))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(t_1 + Float64(cos(phi2) * t_2)))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_0)))) * Float64(-R))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -0.0018], N[(R * N[ArcCos[N[(t$95$1 + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.9e-5], N[(R * N[ArcCos[N[(t$95$2 * N[(N[Cos[phi1], $MachinePrecision] * N[(phi2 * N[(phi2 * -0.5), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(phi2 * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(t$95$1 + N[(N[Cos[phi2], $MachinePrecision] * t$95$2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \sin \phi_2 \cdot \sin \phi_1\\
t_2 := \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -0.0018:\\
\;\;\;\;R \cdot \cos^{-1} \left(t\_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 1.9 \cdot 10^{-5}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(t\_2, \cos \phi_1 \cdot \mathsf{fma}\left(\phi_2, \phi_2 \cdot -0.5, 1\right), \phi_2 \cdot \sin \phi_1\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(t\_1 + \cos \phi_2 \cdot t\_2\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -0.0018Initial program 81.6%
if -0.0018 < phi2 < 1.9000000000000001e-5Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
distribute-rgt-inN/A
*-commutativeN/A
associate-+l+N/A
Applied rewrites89.9%
Taylor expanded in phi1 around inf
Applied rewrites89.9%
if 1.9000000000000001e-5 < phi2 < 1.6000000000000001e72Initial program 63.4%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6494.1
Applied rewrites94.1%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6473.8
Applied rewrites73.8%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.9%
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 phi1) (cos phi2))) (t_1 (cos (- lambda1 lambda2))))
(if (<= phi2 -0.061)
(* R (acos (+ (* (sin phi2) (sin phi1)) (* t_0 t_1))))
(if (<= phi2 1.3e+72)
(*
R
(acos
(+
(* phi2 (sin phi1))
(*
t_0
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1)))))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_1))))
(- R)))))))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(phi1) * cos(phi2);
double t_1 = cos((lambda1 - lambda2));
double tmp;
if (phi2 <= -0.061) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + (t_0 * t_1)));
} else if (phi2 <= 1.3e+72) {
tmp = R * acos(((phi2 * sin(phi1)) + (t_0 * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))))));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_1)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * cos(phi2)) t_1 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -0.061) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(t_0 * t_1)))); elseif (phi2 <= 1.3e+72) tmp = Float64(R * acos(Float64(Float64(phi2 * sin(phi1)) + Float64(t_0 * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))))))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_1)))) * Float64(-R))); end return tmp end
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[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -0.061], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(t$95$0 * t$95$1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.3e+72], N[(R * N[ArcCos[N[(N[(phi2 * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(t$95$0 * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \cos \phi_2\\
t_1 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -0.061:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + t\_0 \cdot t\_1\right)\\
\mathbf{elif}\;\phi_2 \leq 1.3 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\phi_2 \cdot \sin \phi_1 + t\_0 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_1\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -0.060999999999999999Initial program 81.5%
if -0.060999999999999999 < phi2 < 1.29999999999999991e72Initial program 67.6%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6490.4
Applied rewrites90.4%
Taylor expanded in phi2 around 0
lower-*.f64N/A
lower-sin.f6487.0
Applied rewrites87.0%
if 1.29999999999999991e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.2%
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 (- lambda1 lambda2))))
(if (<= phi2 -0.0018)
(*
R
(acos (+ (* (sin phi2) (sin phi1)) (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 0.00012)
(*
R
(acos
(fma
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2)))
(* (cos phi1) (fma phi2 (* phi2 -0.5) 1.0))
(* phi2 (sin phi1)))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_0))))
(- R))))))))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((lambda1 - lambda2));
double tmp;
if (phi2 <= -0.0018) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 0.00012) {
tmp = R * acos(fma(fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2))), (cos(phi1) * fma(phi2, (phi2 * -0.5), 1.0)), (phi2 * sin(phi1))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_0)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -0.0018) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 0.00012) tmp = Float64(R * acos(fma(fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2))), Float64(cos(phi1) * fma(phi2, Float64(phi2 * -0.5), 1.0)), Float64(phi2 * sin(phi1))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_0)))) * Float64(-R))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -0.0018], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 0.00012], N[(R * N[ArcCos[N[(N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[(phi2 * N[(phi2 * -0.5), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(phi2 * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -0.0018:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 0.00012:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right), \cos \phi_1 \cdot \mathsf{fma}\left(\phi_2, \phi_2 \cdot -0.5, 1\right), \phi_2 \cdot \sin \phi_1\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -0.0018Initial program 81.6%
if -0.0018 < phi2 < 1.20000000000000003e-4Initial program 67.7%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.5
Applied rewrites89.5%
Taylor expanded in phi2 around 0
distribute-rgt-inN/A
*-commutativeN/A
associate-+l+N/A
Applied rewrites89.6%
Taylor expanded in phi1 around inf
Applied rewrites89.6%
if 1.20000000000000003e-4 < phi2 < 1.6000000000000001e72Initial program 64.1%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.8
Applied rewrites51.8%
Applied rewrites74.3%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.9%
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 (- lambda1 lambda2))))
(if (<= phi2 -1.36e-7)
(*
R
(acos (+ (* (sin phi2) (sin phi1)) (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 1e-5)
(*
R
(acos
(fma
phi2
(sin phi1)
(*
(cos phi1)
(fma
(cos lambda1)
(cos lambda2)
(* (sin lambda1) (sin lambda2)))))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_0))))
(- R))))))))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((lambda1 - lambda2));
double tmp;
if (phi2 <= -1.36e-7) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 1e-5) {
tmp = R * acos(fma(phi2, sin(phi1), (cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2))))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_0)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -1.36e-7) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 1e-5) tmp = Float64(R * acos(fma(phi2, sin(phi1), Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2))))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_0)))) * Float64(-R))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -1.36e-7], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1e-5], N[(R * N[ArcCos[N[(phi2 * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -1.36 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 10^{-5}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \sin \phi_1, \cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -1.36e-7Initial program 81.6%
if -1.36e-7 < phi2 < 1.00000000000000008e-5Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
lower-fma.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 1.00000000000000008e-5 < phi2 < 1.6000000000000001e72Initial program 63.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.9
Applied rewrites51.9%
Applied rewrites72.9%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.9%
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 (- lambda1 lambda2))))
(if (<= phi2 -6.6e-9)
(*
R
(acos (+ (* (sin phi2) (sin phi1)) (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 7.2e-6)
(*
R
(acos
(fma
(* (cos phi1) (cos lambda2))
(cos lambda1)
(* (sin lambda1) (* (sin lambda2) (cos phi1))))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_0))))
(- R))))))))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((lambda1 - lambda2));
double tmp;
if (phi2 <= -6.6e-9) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos(fma((cos(phi1) * cos(lambda2)), cos(lambda1), (sin(lambda1) * (sin(lambda2) * cos(phi1)))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_0)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -6.6e-9) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(fma(Float64(cos(phi1) * cos(lambda2)), cos(lambda1), Float64(sin(lambda1) * Float64(sin(lambda2) * cos(phi1)))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_0)))) * Float64(-R))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -6.6e-9], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -6.6 \cdot 10^{-9}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \left(\sin \lambda_2 \cdot \cos \phi_1\right)\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -6.60000000000000037e-9Initial program 81.6%
if -6.60000000000000037e-9 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
distribute-lft-inN/A
associate-+l+N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites89.9%
Taylor expanded in phi2 around 0
associate-*r*N/A
*-commutativeN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6489.9
Applied rewrites89.9%
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 1.6000000000000001e72Initial program 63.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.9
Applied rewrites51.9%
Applied rewrites72.9%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.9%
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 (- lambda1 lambda2))))
(if (<= phi2 -6.6e-9)
(*
R
(acos (+ (* (sin phi2) (sin phi1)) (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(fma
(* PI 0.5)
R
(*
(asin (fma (sin phi1) (sin phi2) (* (cos phi1) (* (cos phi2) t_0))))
(- R))))))))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((lambda1 - lambda2));
double tmp;
if (phi2 <= -6.6e-9) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = fma((((double) M_PI) * 0.5), R, (asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * t_0)))) * -R));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -6.6e-9) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = fma(Float64(pi * 0.5), R, Float64(asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * t_0)))) * Float64(-R))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -6.6e-9], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(Pi * 0.5), $MachinePrecision] * R + N[(N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R)), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -6.6 \cdot 10^{-9}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R, \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right) \cdot \left(-R\right)\right)\\
\end{array}
\end{array}
if phi2 < -6.60000000000000037e-9Initial program 81.6%
if -6.60000000000000037e-9 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 1.6000000000000001e72Initial program 63.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.9
Applied rewrites51.9%
Applied rewrites72.9%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites78.9%
Final simplification84.9%
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 (- lambda1 lambda2))))
(if (<= phi2 -6.6e-9)
(*
R
(acos (+ (* (sin phi2) (sin phi1)) (* (* (cos phi1) (cos phi2)) t_0))))
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(*
R
(acos
(fma (sin phi2) (sin phi1) (* (cos phi1) (* (cos phi2) t_0))))))))))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((lambda1 - lambda2));
double tmp;
if (phi2 <= -6.6e-9) {
tmp = R * acos(((sin(phi2) * sin(phi1)) + ((cos(phi1) * cos(phi2)) * t_0)));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = R * acos(fma(sin(phi2), sin(phi1), (cos(phi1) * (cos(phi2) * t_0))));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= -6.6e-9) tmp = Float64(R * acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = Float64(R * acos(fma(sin(phi2), sin(phi1), Float64(cos(phi1) * Float64(cos(phi2) * t_0))))); end return tmp end
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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -6.6e-9], N[(R * N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -6.6 \cdot 10^{-9}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot t\_0\right)\right)\right)\\
\end{array}
\end{array}
if phi2 < -6.60000000000000037e-9Initial program 81.6%
if -6.60000000000000037e-9 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 1.6000000000000001e72Initial program 63.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.9
Applied rewrites51.9%
Applied rewrites72.9%
if 1.6000000000000001e72 < phi2 Initial program 78.9%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6478.8
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6478.8
Applied rewrites78.8%
Final simplification84.9%
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
(*
R
(acos
(fma
(sin phi2)
(sin phi1)
(* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))))
(if (<= phi2 -6.6e-9)
t_0
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 1.6e+72)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
t_0)))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R * acos(fma(sin(phi2), sin(phi1), (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
double tmp;
if (phi2 <= -6.6e-9) {
tmp = t_0;
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 1.6e+72) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = t_0;
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(R * acos(fma(sin(phi2), sin(phi1), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2))))))) tmp = 0.0 if (phi2 <= -6.6e-9) tmp = t_0; elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 1.6e+72) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = t_0; end return tmp end
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[(R * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -6.6e-9], t$95$0, If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.6e+72], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)\\
\mathbf{if}\;\phi_2 \leq -6.6 \cdot 10^{-9}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.6 \cdot 10^{+72}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if phi2 < -6.60000000000000037e-9 or 1.6000000000000001e72 < phi2 Initial program 80.4%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6480.5
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6480.5
Applied rewrites80.5%
if -6.60000000000000037e-9 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 1.6000000000000001e72Initial program 63.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.9
Applied rewrites51.9%
Applied rewrites72.9%
Final simplification84.9%
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 -1.12e-7)
(*
R
(acos
(fma (cos lambda1) (* (cos phi1) (cos phi2)) (* (sin phi2) (sin phi1)))))
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 7.6e+191)
(*
R
(acos
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1))))))
(*
R
(acos
(fma
(sin phi2)
(sin phi1)
(* (cos phi1) (* (cos phi2) (cos lambda2))))))))))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 <= -1.12e-7) {
tmp = R * acos(fma(cos(lambda1), (cos(phi1) * cos(phi2)), (sin(phi2) * sin(phi1))));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 7.6e+191) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = R * acos(fma(sin(phi2), sin(phi1), (cos(phi1) * (cos(phi2) * cos(lambda2)))));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= -1.12e-7) tmp = Float64(R * acos(fma(cos(lambda1), Float64(cos(phi1) * cos(phi2)), Float64(sin(phi2) * sin(phi1))))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 7.6e+191) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = Float64(R * acos(fma(sin(phi2), sin(phi1), Float64(cos(phi1) * Float64(cos(phi2) * cos(lambda2)))))); end return tmp end
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, -1.12e-7], N[(R * N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.6e+191], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq -1.12 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_1 \cdot \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.6 \cdot 10^{+191}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right)\right)\right)\\
\end{array}
\end{array}
if phi2 < -1.12e-7Initial program 81.6%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6481.7
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in lambda2 around 0
lower-fma.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6459.7
Applied rewrites59.7%
if -1.12e-7 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 7.5999999999999996e191Initial program 69.3%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.2
Applied rewrites51.2%
Applied rewrites66.7%
if 7.5999999999999996e191 < phi2 Initial program 83.1%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6483.1
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6483.1
Applied rewrites83.1%
Taylor expanded in lambda1 around 0
cos-negN/A
lower-cos.f6444.6
Applied rewrites44.6%
Final simplification74.7%
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 (* (sin phi2) (sin phi1))))
(if (<= phi2 -1.12e-7)
(* R (acos (fma (cos lambda1) (* (cos phi1) (cos phi2)) t_0)))
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 7.6e+191)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(* R (acos (fma (cos phi2) (* (cos phi1) (cos lambda2)) t_0))))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi2) * sin(phi1);
double tmp;
if (phi2 <= -1.12e-7) {
tmp = R * acos(fma(cos(lambda1), (cos(phi1) * cos(phi2)), t_0));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 7.6e+191) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda2)), t_0));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi2) * sin(phi1)) tmp = 0.0 if (phi2 <= -1.12e-7) tmp = Float64(R * acos(fma(cos(lambda1), Float64(cos(phi1) * cos(phi2)), t_0))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 7.6e+191) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda2)), t_0))); end return tmp end
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[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -1.12e-7], N[(R * N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.6e+191], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \sin \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\phi_2 \leq -1.12 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_1 \cdot \cos \phi_2, t\_0\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.6 \cdot 10^{+191}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_2, t\_0\right)\right)\\
\end{array}
\end{array}
if phi2 < -1.12e-7Initial program 81.6%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6481.7
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in lambda2 around 0
lower-fma.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6459.7
Applied rewrites59.7%
if -1.12e-7 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 7.5999999999999996e191Initial program 69.3%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.2
Applied rewrites51.2%
Applied rewrites66.7%
if 7.5999999999999996e191 < phi2 Initial program 83.1%
Taylor expanded in lambda1 around 0
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
cos-negN/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6444.6
Applied rewrites44.6%
Final simplification74.7%
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 (* (sin phi2) (sin phi1))))
(if (<= phi2 -1.12e-7)
(* R (acos (fma (cos phi2) (* (cos phi1) (cos lambda1)) t_0)))
(if (<= phi2 7.2e-6)
(*
R
(acos
(*
(cos phi1)
(fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2))))))
(if (<= phi2 7.6e+191)
(*
R
(acos
(*
(cos phi2)
(fma
(sin lambda2)
(sin lambda1)
(* (cos lambda2) (cos lambda1))))))
(* R (acos (fma (cos phi2) (* (cos phi1) (cos lambda2)) t_0))))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi2) * sin(phi1);
double tmp;
if (phi2 <= -1.12e-7) {
tmp = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda1)), t_0));
} else if (phi2 <= 7.2e-6) {
tmp = R * acos((cos(phi1) * fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2)))));
} else if (phi2 <= 7.6e+191) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda2)), t_0));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi2) * sin(phi1)) tmp = 0.0 if (phi2 <= -1.12e-7) tmp = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda1)), t_0))); elseif (phi2 <= 7.2e-6) tmp = Float64(R * acos(Float64(cos(phi1) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2)))))); elseif (phi2 <= 7.6e+191) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda2)), t_0))); end return tmp end
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[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -1.12e-7], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.2e-6], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 7.6e+191], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \sin \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\phi_2 \leq -1.12 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_1, t\_0\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.2 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 7.6 \cdot 10^{+191}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_2, t\_0\right)\right)\\
\end{array}
\end{array}
if phi2 < -1.12e-7Initial program 81.6%
Taylor expanded in lambda2 around 0
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6459.6
Applied rewrites59.6%
if -1.12e-7 < phi2 < 7.19999999999999967e-6Initial program 67.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.8
Applied rewrites89.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6489.9
Applied rewrites89.9%
if 7.19999999999999967e-6 < phi2 < 7.5999999999999996e191Initial program 69.3%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6451.2
Applied rewrites51.2%
Applied rewrites66.7%
if 7.5999999999999996e191 < phi2 Initial program 83.1%
Taylor expanded in lambda1 around 0
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
cos-negN/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6444.6
Applied rewrites44.6%
Final simplification74.7%
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 (* (sin phi2) (sin phi1))))
(if (<= lambda2 -1.55e-6)
(*
R
(acos
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1))))))
(if (<= lambda2 6.8e-15)
(* R (acos (fma (cos phi2) (* (cos phi1) (cos lambda1)) t_0)))
(* R (acos (fma (cos phi2) (* (cos phi1) (cos lambda2)) t_0)))))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi2) * sin(phi1);
double tmp;
if (lambda2 <= -1.55e-6) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else if (lambda2 <= 6.8e-15) {
tmp = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda1)), t_0));
} else {
tmp = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda2)), t_0));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi2) * sin(phi1)) tmp = 0.0 if (lambda2 <= -1.55e-6) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); elseif (lambda2 <= 6.8e-15) tmp = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda1)), t_0))); else tmp = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda2)), t_0))); end return tmp end
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[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda2, -1.55e-6], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[lambda2, 6.8e-15], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \sin \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\lambda_2 \leq -1.55 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{elif}\;\lambda_2 \leq 6.8 \cdot 10^{-15}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_1, t\_0\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_2, t\_0\right)\right)\\
\end{array}
\end{array}
if lambda2 < -1.55e-6Initial program 53.1%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6441.1
Applied rewrites41.1%
Applied rewrites62.0%
if -1.55e-6 < lambda2 < 6.8000000000000001e-15Initial program 88.5%
Taylor expanded in lambda2 around 0
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.5
Applied rewrites88.5%
if 6.8000000000000001e-15 < lambda2 Initial program 64.6%
Taylor expanded in lambda1 around 0
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
cos-negN/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6463.5
Applied rewrites63.5%
Final simplification75.2%
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
(*
R
(acos
(fma
(cos phi2)
(* (cos phi1) (cos lambda1))
(* (sin phi2) (sin phi1)))))))
(if (<= phi1 -0.0034)
t_0
(if (<= phi1 2.05e-5)
(*
R
(acos
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1))))))
t_0))))assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R * acos(fma(cos(phi2), (cos(phi1) * cos(lambda1)), (sin(phi2) * sin(phi1))));
double tmp;
if (phi1 <= -0.0034) {
tmp = t_0;
} else if (phi1 <= 2.05e-5) {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
} else {
tmp = t_0;
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(R * acos(fma(cos(phi2), Float64(cos(phi1) * cos(lambda1)), Float64(sin(phi2) * sin(phi1))))) tmp = 0.0 if (phi1 <= -0.0034) tmp = t_0; elseif (phi1 <= 2.05e-5) tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); else tmp = t_0; end return tmp end
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[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -0.0034], t$95$0, If[LessEqual[phi1, 2.05e-5], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2, \cos \phi_1 \cdot \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)\\
\mathbf{if}\;\phi_1 \leq -0.0034:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_1 \leq 2.05 \cdot 10^{-5}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if phi1 < -0.00339999999999999981 or 2.05000000000000002e-5 < phi1 Initial program 75.6%
Taylor expanded in lambda2 around 0
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6457.8
Applied rewrites57.8%
if -0.00339999999999999981 < phi1 < 2.05000000000000002e-5Initial program 70.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6469.2
Applied rewrites69.2%
Applied rewrites87.6%
Final simplification73.3%
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 -2.2e-7)
(*
R
(acos
(fma 0.0 0.5 (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1)))))))
(*
R
(acos
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1))))))))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 <= -2.2e-7) {
tmp = R * acos(fma(0.0, 0.5, (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1))))));
} else {
tmp = R * acos((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1)))));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -2.2e-7) tmp = Float64(R * acos(fma(0.0, 0.5, Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))); else tmp = Float64(R * acos(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1)))))); end return tmp end
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, -2.2e-7], N[(R * N[ArcCos[N[(0.0 * 0.5 + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.2 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(0, 0.5, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\\
\end{array}
\end{array}
if phi1 < -2.2000000000000001e-7Initial program 70.5%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.4
Applied rewrites99.4%
Applied rewrites42.9%
Taylor expanded in phi1 around 0
cos-negN/A
+-inverses42.9
Applied rewrites42.9%
if -2.2000000000000001e-7 < phi1 Initial program 73.7%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6452.9
Applied rewrites52.9%
Applied rewrites65.6%
Final simplification60.1%
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 -6.6e-6)
(*
R
(acos (fma (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2)))))
(*
R
(acos
(fma 0.0 0.5 (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1)))))))))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 <= -6.6e-6) {
tmp = R * acos(fma(cos(lambda2), cos(lambda1), (sin(lambda1) * sin(lambda2))));
} else {
tmp = R * acos(fma(0.0, 0.5, (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1))))));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= -6.6e-6) tmp = Float64(R * acos(fma(cos(lambda2), cos(lambda1), Float64(sin(lambda1) * sin(lambda2))))); else tmp = Float64(R * acos(fma(0.0, 0.5, Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))); end return tmp end
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, -6.6e-6], N[(R * N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(0.0 * 0.5 + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq -6.6 \cdot 10^{-6}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(0, 0.5, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\\
\end{array}
\end{array}
if lambda2 < -6.60000000000000034e-6Initial program 53.1%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6441.1
Applied rewrites41.1%
Taylor expanded in phi2 around 0
Applied rewrites29.5%
Applied rewrites40.3%
if -6.60000000000000034e-6 < lambda2 Initial program 80.8%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6492.0
Applied rewrites92.0%
Applied rewrites63.8%
Taylor expanded in phi1 around 0
cos-negN/A
+-inverses63.8
Applied rewrites63.8%
Final simplification57.1%
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 (acos (fma 0.0 0.5 (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1))))))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(fma(0.0, 0.5, (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1))))));
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(fma(0.0, 0.5, Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))) end
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[ArcCos[N[(0.0 * 0.5 + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \left(\mathsf{fma}\left(0, 0.5, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)
\end{array}
Initial program 72.9%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6494.0
Applied rewrites94.0%
Applied rewrites58.7%
Taylor expanded in phi1 around 0
cos-negN/A
+-inverses58.7
Applied rewrites58.7%
Final simplification58.7%
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 -2.2e-7) (* R (fma PI 0.5 (- (asin (* (cos phi1) (cos (- lambda1 lambda2))))))) (* R (acos (* (cos phi2) (cos (- lambda2 lambda1)))))))
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 <= -2.2e-7) {
tmp = R * fma(((double) M_PI), 0.5, -asin((cos(phi1) * cos((lambda1 - lambda2)))));
} else {
tmp = R * acos((cos(phi2) * cos((lambda2 - lambda1))));
}
return tmp;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -2.2e-7) tmp = Float64(R * fma(pi, 0.5, Float64(-asin(Float64(cos(phi1) * cos(Float64(lambda1 - lambda2))))))); else tmp = Float64(R * acos(Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))))); end return tmp end
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, -2.2e-7], N[(R * N[(Pi * 0.5 + (-N[ArcSin[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.2 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \mathsf{fma}\left(\pi, 0.5, -\sin^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\
\end{array}
\end{array}
if phi1 < -2.2000000000000001e-7Initial program 70.5%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
distribute-lft-inN/A
associate-+l+N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.4%
Taylor expanded in phi2 around 0
associate-*r*N/A
*-commutativeN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6461.4
Applied rewrites61.4%
Applied rewrites42.3%
if -2.2000000000000001e-7 < phi1 Initial program 73.7%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6452.9
Applied rewrites52.9%
Final simplification50.3%
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 (- lambda2 lambda1))))
(if (<= phi1 -2.2e-7)
(* R (acos (* (cos phi1) t_0)))
(* R (acos (* (cos phi2) t_0))))))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((lambda2 - lambda1));
double tmp;
if (phi1 <= -2.2e-7) {
tmp = R * acos((cos(phi1) * t_0));
} else {
tmp = R * acos((cos(phi2) * t_0));
}
return tmp;
}
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) :: t_0
real(8) :: tmp
t_0 = cos((lambda2 - lambda1))
if (phi1 <= (-2.2d-7)) then
tmp = r * acos((cos(phi1) * t_0))
else
tmp = r * acos((cos(phi2) * t_0))
end if
code = tmp
end function
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((lambda2 - lambda1));
double tmp;
if (phi1 <= -2.2e-7) {
tmp = R * Math.acos((Math.cos(phi1) * t_0));
} else {
tmp = R * Math.acos((Math.cos(phi2) * t_0));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda2 - lambda1)) tmp = 0 if phi1 <= -2.2e-7: tmp = R * math.acos((math.cos(phi1) * t_0)) else: tmp = R * math.acos((math.cos(phi2) * t_0)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda2 - lambda1)) tmp = 0.0 if (phi1 <= -2.2e-7) tmp = Float64(R * acos(Float64(cos(phi1) * t_0))); else tmp = Float64(R * acos(Float64(cos(phi2) * t_0))); end return tmp end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
t_0 = cos((lambda2 - lambda1));
tmp = 0.0;
if (phi1 <= -2.2e-7)
tmp = R * acos((cos(phi1) * t_0));
else
tmp = R * acos((cos(phi2) * t_0));
end
tmp_2 = tmp;
end
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[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -2.2e-7], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_1 \leq -2.2 \cdot 10^{-7}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot t\_0\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot t\_0\right)\\
\end{array}
\end{array}
if phi1 < -2.2000000000000001e-7Initial program 70.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.2
Applied rewrites42.2%
if -2.2000000000000001e-7 < phi1 Initial program 73.7%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6452.9
Applied rewrites52.9%
Final simplification50.3%
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 -45.0) (* R (acos (* (cos phi1) (cos lambda1)))) (* R (acos (* (cos phi2) (cos (- lambda2 lambda1)))))))
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 <= -45.0) {
tmp = R * acos((cos(phi1) * cos(lambda1)));
} else {
tmp = R * acos((cos(phi2) * cos((lambda2 - lambda1))));
}
return tmp;
}
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 <= (-45.0d0)) then
tmp = r * acos((cos(phi1) * cos(lambda1)))
else
tmp = r * acos((cos(phi2) * cos((lambda2 - lambda1))))
end if
code = tmp
end function
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 <= -45.0) {
tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
} else {
tmp = R * Math.acos((Math.cos(phi2) * Math.cos((lambda2 - lambda1))));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -45.0: tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1))) else: tmp = R * math.acos((math.cos(phi2) * math.cos((lambda2 - lambda1)))) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -45.0) tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1)))); else tmp = Float64(R * acos(Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))))); end return tmp end
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 <= -45.0)
tmp = R * acos((cos(phi1) * cos(lambda1)));
else
tmp = R * acos((cos(phi2) * cos((lambda2 - lambda1))));
end
tmp_2 = tmp;
end
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, -45.0], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\phi_1 \leq -45:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\
\end{array}
\end{array}
if phi1 < -45Initial program 70.0%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
distribute-lft-inN/A
associate-+l+N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.4%
Taylor expanded in phi2 around 0
associate-*r*N/A
*-commutativeN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6460.8
Applied rewrites60.8%
Taylor expanded in lambda2 around 0
Applied rewrites33.2%
if -45 < phi1 Initial program 73.8%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6453.0
Applied rewrites53.0%
Final simplification48.3%
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 -1.6e-22) (* R (acos (* (cos phi1) (cos lambda1)))) (* R (acos (* (cos phi2) (cos lambda2))))))
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 <= -1.6e-22) {
tmp = R * acos((cos(phi1) * cos(lambda1)));
} else {
tmp = R * acos((cos(phi2) * cos(lambda2)));
}
return tmp;
}
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 (lambda1 <= (-1.6d-22)) then
tmp = r * acos((cos(phi1) * cos(lambda1)))
else
tmp = r * acos((cos(phi2) * cos(lambda2)))
end if
code = tmp
end function
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 <= -1.6e-22) {
tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
} else {
tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda2)));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -1.6e-22: tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1))) else: tmp = R * math.acos((math.cos(phi2) * math.cos(lambda2))) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -1.6e-22) tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1)))); else tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda2)))); end return tmp end
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 <= -1.6e-22)
tmp = R * acos((cos(phi1) * cos(lambda1)));
else
tmp = R * acos((cos(phi2) * cos(lambda2)));
end
tmp_2 = tmp;
end
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[lambda1, -1.6e-22], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -1.6 \cdot 10^{-22}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_2\right)\\
\end{array}
\end{array}
if lambda1 < -1.59999999999999994e-22Initial program 58.8%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
distribute-lft-inN/A
associate-+l+N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.2%
Taylor expanded in phi2 around 0
associate-*r*N/A
*-commutativeN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6463.5
Applied rewrites63.5%
Taylor expanded in lambda2 around 0
Applied rewrites40.4%
if -1.59999999999999994e-22 < lambda1 Initial program 78.1%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6446.8
Applied rewrites46.8%
Taylor expanded in lambda1 around 0
Applied rewrites34.1%
Final simplification35.8%
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 -0.00045) (* R (acos (* (cos phi2) (cos lambda1)))) (* R (acos (* (cos phi2) (cos lambda2))))))
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 <= -0.00045) {
tmp = R * acos((cos(phi2) * cos(lambda1)));
} else {
tmp = R * acos((cos(phi2) * cos(lambda2)));
}
return tmp;
}
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 (lambda1 <= (-0.00045d0)) then
tmp = r * acos((cos(phi2) * cos(lambda1)))
else
tmp = r * acos((cos(phi2) * cos(lambda2)))
end if
code = tmp
end function
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 <= -0.00045) {
tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda1)));
} else {
tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda2)));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -0.00045: tmp = R * math.acos((math.cos(phi2) * math.cos(lambda1))) else: tmp = R * math.acos((math.cos(phi2) * math.cos(lambda2))) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -0.00045) tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda1)))); else tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda2)))); end return tmp end
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 <= -0.00045)
tmp = R * acos((cos(phi2) * cos(lambda1)));
else
tmp = R * acos((cos(phi2) * cos(lambda2)));
end
tmp_2 = tmp;
end
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[lambda1, -0.00045], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -0.00045:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_2\right)\\
\end{array}
\end{array}
if lambda1 < -4.4999999999999999e-4Initial program 58.0%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6438.2
Applied rewrites38.2%
Taylor expanded in lambda2 around 0
Applied rewrites38.5%
if -4.4999999999999999e-4 < lambda1 Initial program 77.9%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6447.3
Applied rewrites47.3%
Taylor expanded in lambda1 around 0
Applied rewrites34.7%
Final simplification35.7%
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 0.036) (* R (acos (* (cos phi2) (cos lambda1)))) (* R (acos (cos lambda2)))))
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 <= 0.036) {
tmp = R * acos((cos(phi2) * cos(lambda1)));
} else {
tmp = R * acos(cos(lambda2));
}
return tmp;
}
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 (lambda2 <= 0.036d0) then
tmp = r * acos((cos(phi2) * cos(lambda1)))
else
tmp = r * acos(cos(lambda2))
end if
code = tmp
end function
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 <= 0.036) {
tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda1)));
} else {
tmp = R * Math.acos(Math.cos(lambda2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 0.036: tmp = R * math.acos((math.cos(phi2) * math.cos(lambda1))) else: tmp = R * math.acos(math.cos(lambda2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 0.036) tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda1)))); else tmp = Float64(R * acos(cos(lambda2))); end return tmp end
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 <= 0.036)
tmp = R * acos((cos(phi2) * cos(lambda1)));
else
tmp = R * acos(cos(lambda2));
end
tmp_2 = tmp;
end
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, 0.036], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 0.036:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \cos \lambda_2\\
\end{array}
\end{array}
if lambda2 < 0.0359999999999999973Initial program 75.5%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6446.8
Applied rewrites46.8%
Taylor expanded in lambda2 around 0
Applied rewrites38.1%
if 0.0359999999999999973 < lambda2 Initial program 63.8%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6438.8
Applied rewrites38.8%
Taylor expanded in phi2 around 0
Applied rewrites30.7%
Taylor expanded in lambda1 around 0
Applied rewrites30.8%
Final simplification36.5%
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) -0.4)
(* R (acos (cos (- lambda2 lambda1))))
(*
R
(acos
(*
(cos phi2)
(fma
lambda2
(fma lambda2 (fma lambda1 (* lambda1 0.25) -0.5) lambda1)
(fma -0.5 (* lambda1 lambda1) 1.0)))))))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) <= -0.4) {
tmp = R * acos(cos((lambda2 - lambda1)));
} else {
tmp = R * acos((cos(phi2) * fma(lambda2, fma(lambda2, fma(lambda1, (lambda1 * 0.25), -0.5), lambda1), fma(-0.5, (lambda1 * lambda1), 1.0))));
}
return tmp;
}
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) <= -0.4) tmp = Float64(R * acos(cos(Float64(lambda2 - lambda1)))); else tmp = Float64(R * acos(Float64(cos(phi2) * fma(lambda2, fma(lambda2, fma(lambda1, Float64(lambda1 * 0.25), -0.5), lambda1), fma(-0.5, Float64(lambda1 * lambda1), 1.0))))); end return tmp end
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], -0.4], N[(R * N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(lambda2 * N[(lambda2 * N[(lambda1 * N[(lambda1 * 0.25), $MachinePrecision] + -0.5), $MachinePrecision] + lambda1), $MachinePrecision] + N[(-0.5 * N[(lambda1 * lambda1), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -0.4:\\
\;\;\;\;R \cdot \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\lambda_2, \mathsf{fma}\left(\lambda_2, \mathsf{fma}\left(\lambda_1, \lambda_1 \cdot 0.25, -0.5\right), \lambda_1\right), \mathsf{fma}\left(-0.5, \lambda_1 \cdot \lambda_1, 1\right)\right)\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -0.40000000000000002Initial program 72.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6444.1
Applied rewrites44.1%
Taylor expanded in phi2 around 0
Applied rewrites33.9%
if -0.40000000000000002 < (-.f64 lambda1 lambda2) Initial program 73.2%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.6
Applied rewrites45.6%
Taylor expanded in lambda1 around 0
Applied rewrites24.5%
Taylor expanded in lambda2 around 0
Applied rewrites11.0%
Final simplification19.3%
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) -0.4) (* R (acos (cos (- lambda2 lambda1)))) (* R (acos (* (cos phi2) (fma -0.5 (* lambda1 lambda1) 1.0))))))
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) <= -0.4) {
tmp = R * acos(cos((lambda2 - lambda1)));
} else {
tmp = R * acos((cos(phi2) * fma(-0.5, (lambda1 * lambda1), 1.0)));
}
return tmp;
}
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) <= -0.4) tmp = Float64(R * acos(cos(Float64(lambda2 - lambda1)))); else tmp = Float64(R * acos(Float64(cos(phi2) * fma(-0.5, Float64(lambda1 * lambda1), 1.0)))); end return tmp end
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], -0.4], N[(R * N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(-0.5 * N[(lambda1 * lambda1), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -0.4:\\
\;\;\;\;R \cdot \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(-0.5, \lambda_1 \cdot \lambda_1, 1\right)\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -0.40000000000000002Initial program 72.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6444.1
Applied rewrites44.1%
Taylor expanded in phi2 around 0
Applied rewrites33.9%
if -0.40000000000000002 < (-.f64 lambda1 lambda2) Initial program 73.2%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.6
Applied rewrites45.6%
Taylor expanded in lambda1 around 0
Applied rewrites24.5%
Taylor expanded in lambda2 around 0
Applied rewrites13.5%
Final simplification20.9%
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) -0.4) (* R (acos (cos (- lambda2 lambda1)))) (* R (acos (* (cos lambda2) (* lambda1 (* lambda1 -0.5)))))))
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) <= -0.4) {
tmp = R * acos(cos((lambda2 - lambda1)));
} else {
tmp = R * acos((cos(lambda2) * (lambda1 * (lambda1 * -0.5))));
}
return tmp;
}
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 ((lambda1 - lambda2) <= (-0.4d0)) then
tmp = r * acos(cos((lambda2 - lambda1)))
else
tmp = r * acos((cos(lambda2) * (lambda1 * (lambda1 * (-0.5d0)))))
end if
code = tmp
end function
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) <= -0.4) {
tmp = R * Math.acos(Math.cos((lambda2 - lambda1)));
} else {
tmp = R * Math.acos((Math.cos(lambda2) * (lambda1 * (lambda1 * -0.5))));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if (lambda1 - lambda2) <= -0.4: tmp = R * math.acos(math.cos((lambda2 - lambda1))) else: tmp = R * math.acos((math.cos(lambda2) * (lambda1 * (lambda1 * -0.5)))) return tmp
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) <= -0.4) tmp = Float64(R * acos(cos(Float64(lambda2 - lambda1)))); else tmp = Float64(R * acos(Float64(cos(lambda2) * Float64(lambda1 * Float64(lambda1 * -0.5))))); end return tmp end
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) <= -0.4)
tmp = R * acos(cos((lambda2 - lambda1)));
else
tmp = R * acos((cos(lambda2) * (lambda1 * (lambda1 * -0.5))));
end
tmp_2 = tmp;
end
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], -0.4], N[(R * N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[(lambda1 * N[(lambda1 * -0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -0.4:\\
\;\;\;\;R \cdot \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\cos \lambda_2 \cdot \left(\lambda_1 \cdot \left(\lambda_1 \cdot -0.5\right)\right)\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -0.40000000000000002Initial program 72.4%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6444.1
Applied rewrites44.1%
Taylor expanded in phi2 around 0
Applied rewrites33.9%
if -0.40000000000000002 < (-.f64 lambda1 lambda2) Initial program 73.2%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.6
Applied rewrites45.6%
Taylor expanded in phi2 around 0
Applied rewrites27.1%
Taylor expanded in lambda1 around 0
Applied rewrites10.3%
Taylor expanded in lambda1 around inf
Applied rewrites10.0%
Final simplification18.7%
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 -0.0011) (* R (acos (cos lambda1))) (* R (acos (cos lambda2)))))
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 <= -0.0011) {
tmp = R * acos(cos(lambda1));
} else {
tmp = R * acos(cos(lambda2));
}
return tmp;
}
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 (lambda1 <= (-0.0011d0)) then
tmp = r * acos(cos(lambda1))
else
tmp = r * acos(cos(lambda2))
end if
code = tmp
end function
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 <= -0.0011) {
tmp = R * Math.acos(Math.cos(lambda1));
} else {
tmp = R * Math.acos(Math.cos(lambda2));
}
return tmp;
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -0.0011: tmp = R * math.acos(math.cos(lambda1)) else: tmp = R * math.acos(math.cos(lambda2)) return tmp
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -0.0011) tmp = Float64(R * acos(cos(lambda1))); else tmp = Float64(R * acos(cos(lambda2))); end return tmp end
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 <= -0.0011)
tmp = R * acos(cos(lambda1));
else
tmp = R * acos(cos(lambda2));
end
tmp_2 = tmp;
end
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[lambda1, -0.0011], N[(R * N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -0.0011:\\
\;\;\;\;R \cdot \cos^{-1} \cos \lambda_1\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \cos \lambda_2\\
\end{array}
\end{array}
if lambda1 < -0.00110000000000000007Initial program 58.0%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6438.2
Applied rewrites38.2%
Taylor expanded in phi2 around 0
Applied rewrites30.3%
Taylor expanded in lambda2 around 0
Applied rewrites30.5%
if -0.00110000000000000007 < lambda1 Initial program 77.9%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6447.3
Applied rewrites47.3%
Taylor expanded in phi2 around 0
Applied rewrites29.3%
Taylor expanded in lambda1 around 0
Applied rewrites18.8%
Final simplification21.7%
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 (acos (cos (- lambda2 lambda1)))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(cos((lambda2 - lambda1)));
}
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 * acos(cos((lambda2 - lambda1)))
end function
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.acos(Math.cos((lambda2 - lambda1)));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * math.acos(math.cos((lambda2 - lambda1)))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(cos(Float64(lambda2 - lambda1)))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * acos(cos((lambda2 - lambda1)));
end
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[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right)
\end{array}
Initial program 72.9%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.0
Applied rewrites45.0%
Taylor expanded in phi2 around 0
Applied rewrites29.6%
Final simplification29.6%
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 (acos (cos lambda1))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(cos(lambda1));
}
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 * acos(cos(lambda1))
end function
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.acos(Math.cos(lambda1));
}
[R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2]) def code(R, lambda1, lambda2, phi1, phi2): return R * math.acos(math.cos(lambda1))
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(cos(lambda1))) end
R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R, lambda1, lambda2, phi1, phi2)
tmp = R * acos(cos(lambda1));
end
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[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \cos \lambda_1
\end{array}
Initial program 72.9%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.0
Applied rewrites45.0%
Taylor expanded in phi2 around 0
Applied rewrites29.6%
Taylor expanded in lambda2 around 0
Applied rewrites20.3%
Final simplification20.3%
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 (acos (fma lambda1 (* lambda1 -0.5) 1.0))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(fma(lambda1, (lambda1 * -0.5), 1.0));
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2]) function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(fma(lambda1, Float64(lambda1 * -0.5), 1.0))) end
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[ArcCos[N[(lambda1 * N[(lambda1 * -0.5), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \left(\mathsf{fma}\left(\lambda_1, \lambda_1 \cdot -0.5, 1\right)\right)
\end{array}
Initial program 72.9%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-cos.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6445.0
Applied rewrites45.0%
Taylor expanded in phi2 around 0
Applied rewrites29.6%
Taylor expanded in lambda1 around 0
Applied rewrites11.9%
Taylor expanded in lambda2 around 0
Applied rewrites2.1%
Final simplification2.1%
herbie shell --seed 2024226
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))