
(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 21 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}
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R
(acos
(fma
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1))))
(cos phi1)
(* (sin phi1) (sin phi2))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * acos(fma((cos(phi2) * fma(cos(lambda1), cos(lambda2), (sin(lambda2) * sin(lambda1)))), cos(phi1), (sin(phi1) * sin(phi2))));
}
function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * acos(fma(Float64(cos(phi2) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda2) * sin(lambda1)))), cos(phi1), Float64(sin(phi1) * sin(phi2))))) end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)
\end{array}
Initial program 73.2%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6493.2
Applied rewrites93.2%
Taylor expanded in lambda1 around inf
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
Applied rewrites93.2%
Final simplification93.2%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))) (t_1 (cos (- lambda2 lambda1))))
(if (<= phi1 -7.5e-8)
(* (acos (fma (* t_1 (cos phi2)) (cos phi1) t_0)) R)
(if (<= phi1 1.6e-7)
(*
(acos
(fma
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))
(cos phi2)
(* (sin phi2) phi1)))
R)
(fma
(* (PI) 0.5)
R
(* (- R) (asin (fma (* t_1 (cos phi1)) (cos phi2) t_0))))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_1 \leq -7.5 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
\mathbf{elif}\;\phi_1 \leq 1.6 \cdot 10^{-7}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_2, \sin \phi_2 \cdot \phi_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{PI}\left(\right) \cdot 0.5, R, \left(-R\right) \cdot \sin^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_1, \cos \phi_2, t\_0\right)\right)\right)\\
\end{array}
\end{array}
if phi1 < -7.4999999999999997e-8Initial program 78.0%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-fma.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
lift--.f64N/A
lift-cos.f64N/A
associate-*l*N/A
*-commutativeN/A
Applied rewrites78.1%
if -7.4999999999999997e-8 < phi1 < 1.6e-7Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
if 1.6e-7 < phi1 Initial program 83.1%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
clear-numN/A
associate-/r/N/A
lower-*.f64N/A
metadata-evalN/A
lower-PI.f64N/A
lower-*.f64N/A
Applied rewrites83.2%
Final simplification84.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))) (t_1 (cos (- lambda2 lambda1))))
(if (<= phi1 -7.2e-9)
(* (acos (fma (* t_1 (cos phi2)) (cos phi1) t_0)) R)
(if (<= phi1 7.5e-8)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(fma
(* (PI) 0.5)
R
(* (- R) (asin (fma (* t_1 (cos phi1)) (cos phi2) t_0))))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_1 \leq -7.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
\mathbf{elif}\;\phi_1 \leq 7.5 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{PI}\left(\right) \cdot 0.5, R, \left(-R\right) \cdot \sin^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_1, \cos \phi_2, t\_0\right)\right)\right)\\
\end{array}
\end{array}
if phi1 < -7.2e-9Initial program 78.0%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-fma.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
lift--.f64N/A
lift-cos.f64N/A
associate-*l*N/A
*-commutativeN/A
Applied rewrites78.1%
if -7.2e-9 < phi1 < 7.4999999999999997e-8Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6487.9
Applied rewrites87.9%
if 7.4999999999999997e-8 < phi1 Initial program 83.1%
lift-*.f64N/A
*-commutativeN/A
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
distribute-rgt-inN/A
lower-fma.f64N/A
clear-numN/A
associate-/r/N/A
lower-*.f64N/A
metadata-evalN/A
lower-PI.f64N/A
lower-*.f64N/A
Applied rewrites83.2%
Final simplification84.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))) (t_1 (cos (- lambda2 lambda1))))
(if (<= phi1 -7.2e-9)
(* (acos (fma (* t_1 (cos phi2)) (cos phi1) t_0)) R)
(if (<= phi1 6.8e-8)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(fma
(asin (- (fma (* t_1 (cos phi1)) (cos phi2) t_0)))
R
(* (* (PI) 0.5) R))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_1 \leq -7.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
\mathbf{elif}\;\phi_1 \leq 6.8 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sin^{-1} \left(-\mathsf{fma}\left(t\_1 \cdot \cos \phi_1, \cos \phi_2, t\_0\right)\right), R, \left(\mathsf{PI}\left(\right) \cdot 0.5\right) \cdot R\right)\\
\end{array}
\end{array}
if phi1 < -7.2e-9Initial program 78.0%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-fma.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
lift--.f64N/A
lift-cos.f64N/A
associate-*l*N/A
*-commutativeN/A
Applied rewrites78.1%
if -7.2e-9 < phi1 < 6.8e-8Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6487.9
Applied rewrites87.9%
if 6.8e-8 < phi1 Initial program 83.1%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.0
Applied rewrites99.0%
Applied rewrites83.0%
Final simplification84.4%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))))
(if (<= phi1 -7.2e-9)
(* (acos (fma (* (cos (- lambda2 lambda1)) (cos phi2)) (cos phi1) t_0)) R)
(if (<= phi1 7.5e-8)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(*
(-
(* (PI) 0.5)
(asin (fma (* (cos (- lambda1 lambda2)) (cos phi2)) (cos phi1) t_0)))
R)))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\phi_1 \leq -7.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
\mathbf{elif}\;\phi_1 \leq 7.5 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\left(\mathsf{PI}\left(\right) \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right)\right) \cdot R\\
\end{array}
\end{array}
if phi1 < -7.2e-9Initial program 78.0%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-fma.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
lift--.f64N/A
lift-cos.f64N/A
associate-*l*N/A
*-commutativeN/A
Applied rewrites78.1%
if -7.2e-9 < phi1 < 7.4999999999999997e-8Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6487.9
Applied rewrites87.9%
if 7.4999999999999997e-8 < phi1 Initial program 83.1%
lift-acos.f64N/A
acos-asinN/A
sub-negN/A
div-invN/A
add-sqr-sqrtN/A
associate-*l*N/A
lower-fma.f64N/A
lower-sqrt.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-PI.f64N/A
metadata-evalN/A
lower-neg.f64N/A
Applied rewrites82.1%
Taylor expanded in lambda1 around 0
lower--.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-asin.f64N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites83.0%
Final simplification84.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))) (t_1 (cos (- lambda2 lambda1))))
(if (<= phi1 -7.2e-9)
(* (acos (fma (* t_1 (cos phi2)) (cos phi1) t_0)) R)
(if (<= phi1 6.8e-8)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(* (acos (fma (* t_1 (cos phi1)) (cos phi2) t_0)) R)))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi1) * sin(phi2);
double t_1 = cos((lambda2 - lambda1));
double tmp;
if (phi1 <= -7.2e-9) {
tmp = acos(fma((t_1 * cos(phi2)), cos(phi1), t_0)) * R;
} else if (phi1 <= 6.8e-8) {
tmp = acos((cos(phi2) * fma(cos(lambda1), cos(lambda2), (sin(lambda2) * sin(lambda1))))) * R;
} else {
tmp = acos(fma((t_1 * cos(phi1)), cos(phi2), t_0)) * R;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi1) * sin(phi2)) t_1 = cos(Float64(lambda2 - lambda1)) tmp = 0.0 if (phi1 <= -7.2e-9) tmp = Float64(acos(fma(Float64(t_1 * cos(phi2)), cos(phi1), t_0)) * R); elseif (phi1 <= 6.8e-8) tmp = Float64(acos(Float64(cos(phi2) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda2) * sin(lambda1))))) * R); else tmp = Float64(acos(fma(Float64(t_1 * cos(phi1)), cos(phi2), t_0)) * R); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -7.2e-9], N[(N[ArcCos[N[(N[(t$95$1 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi1, 6.8e-8], N[(N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(t$95$1 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_1 \leq -7.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
\mathbf{elif}\;\phi_1 \leq 6.8 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_1 \cdot \cos \phi_1, \cos \phi_2, t\_0\right)\right) \cdot R\\
\end{array}
\end{array}
if phi1 < -7.2e-9Initial program 78.0%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-fma.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
lift--.f64N/A
lift-cos.f64N/A
associate-*l*N/A
*-commutativeN/A
Applied rewrites78.1%
if -7.2e-9 < phi1 < 6.8e-8Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6487.9
Applied rewrites87.9%
if 6.8e-8 < phi1 Initial program 83.1%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f6483.1
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
*-commutativeN/A
cos-diffN/A
lower-cos.f64N/A
lower--.f6483.1
lift-*.f64N/A
*-commutativeN/A
lower-*.f6483.1
Applied rewrites83.1%
Final simplification84.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0
(*
(acos
(fma
(* (cos (- lambda2 lambda1)) (cos phi1))
(cos phi2)
(* (sin phi1) (sin phi2))))
R)))
(if (<= phi1 -7.2e-9)
t_0
(if (<= phi1 6.8e-8)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
t_0))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = acos(fma((cos((lambda2 - lambda1)) * cos(phi1)), cos(phi2), (sin(phi1) * sin(phi2)))) * R;
double tmp;
if (phi1 <= -7.2e-9) {
tmp = t_0;
} else if (phi1 <= 6.8e-8) {
tmp = acos((cos(phi2) * fma(cos(lambda1), cos(lambda2), (sin(lambda2) * sin(lambda1))))) * R;
} else {
tmp = t_0;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(acos(fma(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)), cos(phi2), Float64(sin(phi1) * sin(phi2)))) * R) tmp = 0.0 if (phi1 <= -7.2e-9) tmp = t_0; elseif (phi1 <= 6.8e-8) tmp = Float64(acos(Float64(cos(phi2) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda2) * sin(lambda1))))) * R); else tmp = t_0; end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[ArcCos[N[(N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]}, If[LessEqual[phi1, -7.2e-9], t$95$0, If[LessEqual[phi1, 6.8e-8], N[(N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
\mathbf{if}\;\phi_1 \leq -7.2 \cdot 10^{-9}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_1 \leq 6.8 \cdot 10^{-8}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if phi1 < -7.2e-9 or 6.8e-8 < phi1 Initial program 80.5%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f6480.5
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
*-commutativeN/A
cos-diffN/A
lower-cos.f64N/A
lower--.f6480.5
lift-*.f64N/A
*-commutativeN/A
lower-*.f6480.5
Applied rewrites80.5%
if -7.2e-9 < phi1 < 6.8e-8Initial program 66.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
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6488.0
Applied rewrites88.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6487.9
Applied rewrites87.9%
Final simplification84.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (cos phi2))))
(if (<= lambda2 -1.2e-11)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(if (<= lambda2 1.12e-38)
(* (acos (fma t_0 (cos lambda1) (* (sin phi1) (sin phi2)))) R)
(* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos lambda2)))) R)))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * cos(phi2);
double tmp;
if (lambda2 <= -1.2e-11) {
tmp = acos((cos(phi2) * fma(cos(lambda1), cos(lambda2), (sin(lambda2) * sin(lambda1))))) * R;
} else if (lambda2 <= 1.12e-38) {
tmp = acos(fma(t_0, cos(lambda1), (sin(phi1) * sin(phi2)))) * R;
} else {
tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(lambda2)))) * R;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (lambda2 <= -1.2e-11) tmp = Float64(acos(Float64(cos(phi2) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda2) * sin(lambda1))))) * R); elseif (lambda2 <= 1.12e-38) tmp = Float64(acos(fma(t_0, cos(lambda1), Float64(sin(phi1) * sin(phi2)))) * R); else tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(lambda2)))) * R); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda2, -1.2e-11], N[(N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[lambda2, 1.12e-38], N[(N[ArcCos[N[(t$95$0 * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \cos \phi_2\\
\mathbf{if}\;\lambda_2 \leq -1.2 \cdot 10^{-11}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{elif}\;\lambda_2 \leq 1.12 \cdot 10^{-38}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \lambda_2\right)\right) \cdot R\\
\end{array}
\end{array}
if lambda2 < -1.2000000000000001e-11Initial program 57.2%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6470.0
Applied rewrites70.0%
if -1.2000000000000001e-11 < lambda2 < 1.1200000000000001e-38Initial program 87.5%
Taylor expanded in lambda2 around 0
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6487.6
Applied rewrites87.6%
if 1.1200000000000001e-38 < lambda2 Initial program 62.1%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6497.6
Applied rewrites97.6%
Taylor expanded in lambda1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f6462.1
Applied rewrites62.1%
Final simplification76.8%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= lambda2 -1.2e-11)
(*
(acos
(*
(cos phi2)
(fma (cos lambda1) (cos lambda2) (* (sin lambda2) (sin lambda1)))))
R)
(if (<= lambda2 1.12e-38)
(*
(acos
(fma (* (cos phi1) (cos phi2)) (cos lambda1) (* (sin phi1) (sin phi2))))
R)
(*
(acos
(fma (sin phi2) (sin phi1) (* (* (cos phi2) (cos lambda2)) (cos phi1))))
R))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= -1.2e-11) {
tmp = acos((cos(phi2) * fma(cos(lambda1), cos(lambda2), (sin(lambda2) * sin(lambda1))))) * R;
} else if (lambda2 <= 1.12e-38) {
tmp = acos(fma((cos(phi1) * cos(phi2)), cos(lambda1), (sin(phi1) * sin(phi2)))) * R;
} else {
tmp = acos(fma(sin(phi2), sin(phi1), ((cos(phi2) * cos(lambda2)) * cos(phi1)))) * R;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= -1.2e-11) tmp = Float64(acos(Float64(cos(phi2) * fma(cos(lambda1), cos(lambda2), Float64(sin(lambda2) * sin(lambda1))))) * R); elseif (lambda2 <= 1.12e-38) tmp = Float64(acos(fma(Float64(cos(phi1) * cos(phi2)), cos(lambda1), Float64(sin(phi1) * sin(phi2)))) * R); else tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi2) * cos(lambda2)) * cos(phi1)))) * R); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, -1.2e-11], N[(N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[lambda2, 1.12e-38], N[(N[ArcCos[N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq -1.2 \cdot 10^{-11}:\\
\;\;\;\;\cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
\mathbf{elif}\;\lambda_2 \leq 1.12 \cdot 10^{-38}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\
\end{array}
\end{array}
if lambda2 < -1.2000000000000001e-11Initial program 57.2%
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
*-commutativeN/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6499.3
Applied rewrites99.3%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-cos.f6470.0
Applied rewrites70.0%
if -1.2000000000000001e-11 < lambda2 < 1.1200000000000001e-38Initial program 87.5%
Taylor expanded in lambda2 around 0
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6487.6
Applied rewrites87.6%
if 1.1200000000000001e-38 < lambda2 Initial program 62.1%
Taylor expanded in lambda1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f6462.1
Applied rewrites62.1%
Final simplification76.8%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= lambda2 -124000000.0)
(*
(acos
(*
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
(cos phi1)))
R)
(if (<= lambda2 1.12e-38)
(*
(acos
(fma (* (cos phi1) (cos phi2)) (cos lambda1) (* (sin phi1) (sin phi2))))
R)
(*
(acos
(fma (sin phi2) (sin phi1) (* (* (cos phi2) (cos lambda2)) (cos phi1))))
R))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= -124000000.0) {
tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi1))) * R;
} else if (lambda2 <= 1.12e-38) {
tmp = acos(fma((cos(phi1) * cos(phi2)), cos(lambda1), (sin(phi1) * sin(phi2)))) * R;
} else {
tmp = acos(fma(sin(phi2), sin(phi1), ((cos(phi2) * cos(lambda2)) * cos(phi1)))) * R;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= -124000000.0) tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi1))) * R); elseif (lambda2 <= 1.12e-38) tmp = Float64(acos(fma(Float64(cos(phi1) * cos(phi2)), cos(lambda1), Float64(sin(phi1) * sin(phi2)))) * R); else tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi2) * cos(lambda2)) * cos(phi1)))) * R); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, -124000000.0], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[lambda2, 1.12e-38], N[(N[ArcCos[N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq -124000000:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
\mathbf{elif}\;\lambda_2 \leq 1.12 \cdot 10^{-38}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\
\end{array}
\end{array}
if lambda2 < -1.24e8Initial program 56.2%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6440.5
Applied rewrites40.5%
Applied rewrites58.7%
if -1.24e8 < lambda2 < 1.1200000000000001e-38Initial program 86.9%
Taylor expanded in lambda2 around 0
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6485.8
Applied rewrites85.8%
if 1.1200000000000001e-38 < lambda2 Initial program 62.1%
Taylor expanded in lambda1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f6462.1
Applied rewrites62.1%
Final simplification73.2%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0
(*
(acos
(fma
(sin phi2)
(sin phi1)
(* (* (cos phi2) (cos lambda2)) (cos phi1))))
R)))
(if (<= phi2 -2.4e-6)
t_0
(if (<= phi2 1.3e-5)
(*
(acos
(*
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
(cos phi1)))
R)
t_0))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = acos(fma(sin(phi2), sin(phi1), ((cos(phi2) * cos(lambda2)) * cos(phi1)))) * R;
double tmp;
if (phi2 <= -2.4e-6) {
tmp = t_0;
} else if (phi2 <= 1.3e-5) {
tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi1))) * R;
} else {
tmp = t_0;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi2) * cos(lambda2)) * cos(phi1)))) * R) tmp = 0.0 if (phi2 <= -2.4e-6) tmp = t_0; elseif (phi2 <= 1.3e-5) tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi1))) * R); else tmp = t_0; end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]}, If[LessEqual[phi2, -2.4e-6], t$95$0, If[LessEqual[phi2, 1.3e-5], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\
\mathbf{if}\;\phi_2 \leq -2.4 \cdot 10^{-6}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_2 \leq 1.3 \cdot 10^{-5}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if phi2 < -2.3999999999999999e-6 or 1.29999999999999992e-5 < phi2 Initial program 78.7%
Taylor expanded in lambda1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-cos.f6463.2
Applied rewrites63.2%
if -2.3999999999999999e-6 < phi2 < 1.29999999999999992e-5Initial program 66.3%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6466.3
Applied rewrites66.3%
Applied rewrites85.2%
Final simplification73.0%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= phi2 0.0007)
(*
(acos
(*
(fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
(cos phi1)))
R)
(* (acos (* (cos (- lambda1 lambda2)) (cos phi2))) R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 0.0007) {
tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi1))) * R;
} else {
tmp = acos((cos((lambda1 - lambda2)) * cos(phi2))) * R;
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 0.0007) tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi1))) * R); else tmp = Float64(acos(Float64(cos(Float64(lambda1 - lambda2)) * cos(phi2))) * R); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi2, 0.0007], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq 0.0007:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\
\end{array}
\end{array}
if phi2 < 6.99999999999999993e-4Initial program 71.9%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6446.3
Applied rewrites46.3%
Applied rewrites57.7%
if 6.99999999999999993e-4 < phi2 Initial program 77.1%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6448.8
Applied rewrites48.8%
Final simplification55.5%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (+ lambda1 lambda2))))
(if (<= phi1 -3.2e-9)
(*
(acos (* (/ 1.0 (/ t_0 (* t_0 (cos (- lambda2 lambda1))))) (cos phi1)))
R)
(*
(acos
(+ (* (cos (- lambda1 lambda2)) (cos phi2)) (* (sin phi1) (sin phi2))))
R))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 + lambda2));
double tmp;
if (phi1 <= -3.2e-9) {
tmp = acos(((1.0 / (t_0 / (t_0 * cos((lambda2 - lambda1))))) * cos(phi1))) * R;
} else {
tmp = acos(((cos((lambda1 - lambda2)) * cos(phi2)) + (sin(phi1) * sin(phi2)))) * R;
}
return tmp;
}
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((lambda1 + lambda2))
if (phi1 <= (-3.2d-9)) then
tmp = acos(((1.0d0 / (t_0 / (t_0 * cos((lambda2 - lambda1))))) * cos(phi1))) * r
else
tmp = acos(((cos((lambda1 - lambda2)) * cos(phi2)) + (sin(phi1) * sin(phi2)))) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((lambda1 + lambda2));
double tmp;
if (phi1 <= -3.2e-9) {
tmp = Math.acos(((1.0 / (t_0 / (t_0 * Math.cos((lambda2 - lambda1))))) * Math.cos(phi1))) * R;
} else {
tmp = Math.acos(((Math.cos((lambda1 - lambda2)) * Math.cos(phi2)) + (Math.sin(phi1) * Math.sin(phi2)))) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 + lambda2)) tmp = 0 if phi1 <= -3.2e-9: tmp = math.acos(((1.0 / (t_0 / (t_0 * math.cos((lambda2 - lambda1))))) * math.cos(phi1))) * R else: tmp = math.acos(((math.cos((lambda1 - lambda2)) * math.cos(phi2)) + (math.sin(phi1) * math.sin(phi2)))) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 + lambda2)) tmp = 0.0 if (phi1 <= -3.2e-9) tmp = Float64(acos(Float64(Float64(1.0 / Float64(t_0 / Float64(t_0 * cos(Float64(lambda2 - lambda1))))) * cos(phi1))) * R); else tmp = Float64(acos(Float64(Float64(cos(Float64(lambda1 - lambda2)) * cos(phi2)) + Float64(sin(phi1) * sin(phi2)))) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = cos((lambda1 + lambda2)); tmp = 0.0; if (phi1 <= -3.2e-9) tmp = acos(((1.0 / (t_0 / (t_0 * cos((lambda2 - lambda1))))) * cos(phi1))) * R; else tmp = acos(((cos((lambda1 - lambda2)) * cos(phi2)) + (sin(phi1) * sin(phi2)))) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 + lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -3.2e-9], N[(N[ArcCos[N[(N[(1.0 / N[(t$95$0 / N[(t$95$0 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 + \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -3.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(\frac{1}{\frac{t\_0}{t\_0 \cdot \cos \left(\lambda_2 - \lambda_1\right)}} \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R\\
\end{array}
\end{array}
if phi1 < -3.20000000000000012e-9Initial program 78.0%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6447.3
Applied rewrites47.3%
Applied rewrites47.3%
if -3.20000000000000012e-9 < phi1 Initial program 71.7%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6452.5
Applied rewrites52.5%
Final simplification51.3%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))))
(if (<= phi1 -6.7e-9)
(* (acos (* t_0 (cos phi1))) R)
(* (acos (+ (* t_0 (cos phi2)) (* (sin phi1) (sin phi2)))) R))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double tmp;
if (phi1 <= -6.7e-9) {
tmp = acos((t_0 * cos(phi1))) * R;
} else {
tmp = acos(((t_0 * cos(phi2)) + (sin(phi1) * sin(phi2)))) * R;
}
return tmp;
}
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((lambda1 - lambda2))
if (phi1 <= (-6.7d-9)) then
tmp = acos((t_0 * cos(phi1))) * r
else
tmp = acos(((t_0 * cos(phi2)) + (sin(phi1) * sin(phi2)))) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((lambda1 - lambda2));
double tmp;
if (phi1 <= -6.7e-9) {
tmp = Math.acos((t_0 * Math.cos(phi1))) * R;
} else {
tmp = Math.acos(((t_0 * Math.cos(phi2)) + (Math.sin(phi1) * Math.sin(phi2)))) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 - lambda2)) tmp = 0 if phi1 <= -6.7e-9: tmp = math.acos((t_0 * math.cos(phi1))) * R else: tmp = math.acos(((t_0 * math.cos(phi2)) + (math.sin(phi1) * math.sin(phi2)))) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= -6.7e-9) tmp = Float64(acos(Float64(t_0 * cos(phi1))) * R); else tmp = Float64(acos(Float64(Float64(t_0 * cos(phi2)) + Float64(sin(phi1) * sin(phi2)))) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = cos((lambda1 - lambda2)); tmp = 0.0; if (phi1 <= -6.7e-9) tmp = acos((t_0 * cos(phi1))) * R; else tmp = acos(((t_0 * cos(phi2)) + (sin(phi1) * sin(phi2)))) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -6.7e-9], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -6.7 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R\\
\end{array}
\end{array}
if phi1 < -6.69999999999999961e-9Initial program 78.0%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6447.3
Applied rewrites47.3%
if -6.69999999999999961e-9 < phi1 Initial program 71.7%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6452.5
Applied rewrites52.5%
Final simplification51.3%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))))
(if (<= phi1 -3.2e-9)
(* (acos (* t_0 (cos phi1))) R)
(* (acos (* t_0 (cos phi2))) R))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double tmp;
if (phi1 <= -3.2e-9) {
tmp = acos((t_0 * cos(phi1))) * R;
} else {
tmp = acos((t_0 * cos(phi2))) * R;
}
return tmp;
}
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((lambda1 - lambda2))
if (phi1 <= (-3.2d-9)) then
tmp = acos((t_0 * cos(phi1))) * r
else
tmp = acos((t_0 * cos(phi2))) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((lambda1 - lambda2));
double tmp;
if (phi1 <= -3.2e-9) {
tmp = Math.acos((t_0 * Math.cos(phi1))) * R;
} else {
tmp = Math.acos((t_0 * Math.cos(phi2))) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 - lambda2)) tmp = 0 if phi1 <= -3.2e-9: tmp = math.acos((t_0 * math.cos(phi1))) * R else: tmp = math.acos((t_0 * math.cos(phi2))) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= -3.2e-9) tmp = Float64(acos(Float64(t_0 * cos(phi1))) * R); else tmp = Float64(acos(Float64(t_0 * cos(phi2))) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = cos((lambda1 - lambda2)); tmp = 0.0; if (phi1 <= -3.2e-9) tmp = acos((t_0 * cos(phi1))) * R; else tmp = acos((t_0 * cos(phi2))) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -3.2e-9], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -3.2 \cdot 10^{-9}:\\
\;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\
\end{array}
\end{array}
if phi1 < -3.20000000000000012e-9Initial program 78.0%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6447.3
Applied rewrites47.3%
if -3.20000000000000012e-9 < phi1 Initial program 71.7%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6452.5
Applied rewrites52.5%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= lambda2 4.6e-42) (* (acos (* (cos lambda1) (cos phi1))) R) (* (acos (* (cos lambda2) (cos phi1))) R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.6e-42) {
tmp = acos((cos(lambda1) * cos(phi1))) * R;
} else {
tmp = acos((cos(lambda2) * cos(phi1))) * R;
}
return tmp;
}
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 <= 4.6d-42) then
tmp = acos((cos(lambda1) * cos(phi1))) * r
else
tmp = acos((cos(lambda2) * cos(phi1))) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.6e-42) {
tmp = Math.acos((Math.cos(lambda1) * Math.cos(phi1))) * R;
} else {
tmp = Math.acos((Math.cos(lambda2) * Math.cos(phi1))) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 4.6e-42: tmp = math.acos((math.cos(lambda1) * math.cos(phi1))) * R else: tmp = math.acos((math.cos(lambda2) * math.cos(phi1))) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 4.6e-42) tmp = Float64(acos(Float64(cos(lambda1) * cos(phi1))) * R); else tmp = Float64(acos(Float64(cos(lambda2) * cos(phi1))) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 4.6e-42) tmp = acos((cos(lambda1) * cos(phi1))) * R; else tmp = acos((cos(lambda2) * cos(phi1))) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 4.6e-42], N[(N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 4.6 \cdot 10^{-42}:\\
\;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\
\end{array}
\end{array}
if lambda2 < 4.60000000000000008e-42Initial program 76.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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6441.0
Applied rewrites41.0%
Taylor expanded in lambda2 around 0
Applied rewrites32.8%
if 4.60000000000000008e-42 < lambda2 Initial program 62.1%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6434.5
Applied rewrites34.5%
Taylor expanded in lambda1 around 0
Applied rewrites34.4%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= lambda2 9.5e-15) (* (acos (* (cos lambda1) (cos phi1))) R) (* (acos (cos lambda2)) R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 9.5e-15) {
tmp = acos((cos(lambda1) * cos(phi1))) * R;
} else {
tmp = acos(cos(lambda2)) * R;
}
return tmp;
}
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 <= 9.5d-15) then
tmp = acos((cos(lambda1) * cos(phi1))) * r
else
tmp = acos(cos(lambda2)) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 9.5e-15) {
tmp = Math.acos((Math.cos(lambda1) * Math.cos(phi1))) * R;
} else {
tmp = Math.acos(Math.cos(lambda2)) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 9.5e-15: tmp = math.acos((math.cos(lambda1) * math.cos(phi1))) * R else: tmp = math.acos(math.cos(lambda2)) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 9.5e-15) tmp = Float64(acos(Float64(cos(lambda1) * cos(phi1))) * R); else tmp = Float64(acos(cos(lambda2)) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 9.5e-15) tmp = acos((cos(lambda1) * cos(phi1))) * R; else tmp = acos(cos(lambda2)) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 9.5e-15], N[(N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 9.5 \cdot 10^{-15}:\\
\;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \cos \lambda_2 \cdot R\\
\end{array}
\end{array}
if lambda2 < 9.5000000000000005e-15Initial program 76.1%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6440.9
Applied rewrites40.9%
Taylor expanded in lambda2 around 0
Applied rewrites32.6%
if 9.5000000000000005e-15 < lambda2 Initial program 63.2%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6435.0
Applied rewrites35.0%
Taylor expanded in phi1 around 0
Applied rewrites32.3%
Taylor expanded in lambda1 around 0
Applied rewrites32.1%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* (acos (* (cos (- lambda1 lambda2)) (cos phi1))) R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos((cos((lambda1 - lambda2)) * cos(phi1))) * 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((cos((lambda1 - lambda2)) * cos(phi1))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos((Math.cos((lambda1 - lambda2)) * Math.cos(phi1))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos((math.cos((lambda1 - lambda2)) * math.cos(phi1))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(cos(Float64(lambda1 - lambda2)) * cos(phi1))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos((cos((lambda1 - lambda2)) * cos(phi1))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot R
\end{array}
Initial program 73.2%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6439.5
Applied rewrites39.5%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= lambda2 4.6e-42) (* (acos (cos lambda1)) R) (* (acos (cos lambda2)) R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.6e-42) {
tmp = acos(cos(lambda1)) * R;
} else {
tmp = acos(cos(lambda2)) * R;
}
return tmp;
}
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 <= 4.6d-42) then
tmp = acos(cos(lambda1)) * r
else
tmp = acos(cos(lambda2)) * r
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.6e-42) {
tmp = Math.acos(Math.cos(lambda1)) * R;
} else {
tmp = Math.acos(Math.cos(lambda2)) * R;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 4.6e-42: tmp = math.acos(math.cos(lambda1)) * R else: tmp = math.acos(math.cos(lambda2)) * R return tmp
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 4.6e-42) tmp = Float64(acos(cos(lambda1)) * R); else tmp = Float64(acos(cos(lambda2)) * R); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 4.6e-42) tmp = acos(cos(lambda1)) * R; else tmp = acos(cos(lambda2)) * R; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 4.6e-42], N[(N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 4.6 \cdot 10^{-42}:\\
\;\;\;\;\cos^{-1} \cos \lambda_1 \cdot R\\
\mathbf{else}:\\
\;\;\;\;\cos^{-1} \cos \lambda_2 \cdot R\\
\end{array}
\end{array}
if lambda2 < 4.60000000000000008e-42Initial program 76.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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6441.0
Applied rewrites41.0%
Taylor expanded in phi1 around 0
Applied rewrites24.7%
Taylor expanded in lambda2 around 0
Applied rewrites17.2%
if 4.60000000000000008e-42 < lambda2 Initial program 62.1%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6434.5
Applied rewrites34.5%
Taylor expanded in phi1 around 0
Applied rewrites31.8%
Taylor expanded in lambda1 around 0
Applied rewrites31.6%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* (acos (cos (- lambda1 lambda2))) R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(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(cos((lambda1 - lambda2))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(Math.cos((lambda1 - lambda2))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(math.cos((lambda1 - lambda2))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(cos(Float64(lambda1 - lambda2))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(cos((lambda1 - lambda2))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R
\end{array}
Initial program 73.2%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6439.5
Applied rewrites39.5%
Taylor expanded in phi1 around 0
Applied rewrites26.3%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* (acos (cos lambda1)) R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(cos(lambda1)) * 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(cos(lambda1)) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(Math.cos(lambda1)) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(math.cos(lambda1)) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(cos(lambda1)) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(cos(lambda1)) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \cos \lambda_1 \cdot R
\end{array}
Initial program 73.2%
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
lower-cos.f64N/A
+-commutativeN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
sub-negN/A
lower--.f64N/A
lower-cos.f6439.5
Applied rewrites39.5%
Taylor expanded in phi1 around 0
Applied rewrites26.3%
Taylor expanded in lambda2 around 0
Applied rewrites15.7%
herbie shell --seed 2024268
(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))