
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((Math.sin((lambda1 - lambda2)) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.sin(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((math.sin((lambda1 - lambda2)) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.sin(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(sin(Float64(lambda1 - lambda2)) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(sin(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Sin[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 26 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((Math.sin((lambda1 - lambda2)) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.sin(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((math.sin((lambda1 - lambda2)) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.sin(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(sin(Float64(lambda1 - lambda2)) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(sin(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Sin[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(-
(* (cos phi1) (sin phi2))
(*
(* (cos phi2) (sin phi1))
(+ (* (sin lambda1) (sin lambda2)) (* (cos lambda2) (cos lambda1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.cos(phi2) * Math.sin(phi1)) * ((Math.sin(lambda1) * Math.sin(lambda2)) + (Math.cos(lambda2) * Math.cos(lambda1))))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.cos(phi2) * math.sin(phi1)) * ((math.sin(lambda1) * math.sin(lambda2)) + (math.cos(lambda2) * math.cos(lambda1))))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(cos(phi2) * sin(phi1)) * Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda2) * cos(lambda1)))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1)))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_2 \cdot \cos \lambda_1\right)}
\end{array}
Initial program 81.0%
sin-diff86.8%
Applied egg-rr86.8%
cos-diff99.7%
+-commutative99.7%
*-commutative99.7%
Applied egg-rr99.7%
Final simplification99.7%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2)))
(t_1
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))))
(if (or (<= phi2 -5.2e+113) (not (<= phi2 6.6e-22)))
(atan2
t_1
(- t_0 (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2)))))
(atan2
t_1
(-
t_0
(*
(sin phi1)
(+
(* (sin lambda1) (sin lambda2))
(* (cos lambda2) (cos lambda1)))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = ((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2);
double tmp;
if ((phi2 <= -5.2e+113) || !(phi2 <= 6.6e-22)) {
tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2(t_1, (t_0 - (sin(phi1) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = ((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)
if ((phi2 <= (-5.2d+113)) .or. (.not. (phi2 <= 6.6d-22))) then
tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
else
tmp = atan2(t_1, (t_0 - (sin(phi1) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = ((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2);
double tmp;
if ((phi2 <= -5.2e+113) || !(phi2 <= 6.6e-22)) {
tmp = Math.atan2(t_1, (t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * ((Math.sin(lambda1) * Math.sin(lambda2)) + (Math.cos(lambda2) * Math.cos(lambda1))))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = ((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2) tmp = 0 if (phi2 <= -5.2e+113) or not (phi2 <= 6.6e-22): tmp = math.atan2(t_1, (t_0 - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * ((math.sin(lambda1) * math.sin(lambda2)) + (math.cos(lambda2) * math.cos(lambda1)))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)) tmp = 0.0 if ((phi2 <= -5.2e+113) || !(phi2 <= 6.6e-22)) tmp = atan(t_1, Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda2) * cos(lambda1)))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = ((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2); tmp = 0.0; if ((phi2 <= -5.2e+113) || ~((phi2 <= 6.6e-22))) tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); else tmp = atan2(t_1, (t_0 - (sin(phi1) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1)))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[phi2, -5.2e+113], N[Not[LessEqual[phi2, 6.6e-22]], $MachinePrecision]], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\\
\mathbf{if}\;\phi_2 \leq -5.2 \cdot 10^{+113} \lor \neg \left(\phi_2 \leq 6.6 \cdot 10^{-22}\right):\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_2 \cdot \cos \lambda_1\right)}\\
\end{array}
\end{array}
if phi2 < -5.1999999999999998e113 or 6.6000000000000002e-22 < phi2 Initial program 85.2%
sin-diff89.7%
Applied egg-rr89.7%
if -5.1999999999999998e113 < phi2 < 6.6000000000000002e-22Initial program 77.8%
sin-diff84.6%
Applied egg-rr84.6%
cos-diff99.8%
+-commutative99.8%
*-commutative99.8%
Applied egg-rr99.8%
Taylor expanded in phi2 around 0 96.7%
Final simplification93.6%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))) (t_1 (* (cos phi2) (sin phi1))))
(if (or (<= lambda1 -2450000000.0) (not (<= lambda1 1.4e+30)))
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* (cos lambda1) t_1)))
(atan2
(* (cos phi2) (sin (- lambda1 lambda2)))
(-
t_0
(*
t_1
(+
(* (sin lambda1) (sin lambda2))
(* (cos lambda2) (cos lambda1)))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = cos(phi2) * sin(phi1);
double tmp;
if ((lambda1 <= -2450000000.0) || !(lambda1 <= 1.4e+30)) {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (cos(lambda1) * t_1)));
} else {
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - (t_1 * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = cos(phi2) * sin(phi1)
if ((lambda1 <= (-2450000000.0d0)) .or. (.not. (lambda1 <= 1.4d+30))) then
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (cos(lambda1) * t_1)))
else
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - (t_1 * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1))))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.cos(phi2) * Math.sin(phi1);
double tmp;
if ((lambda1 <= -2450000000.0) || !(lambda1 <= 1.4e+30)) {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (Math.cos(lambda1) * t_1)));
} else {
tmp = Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (t_0 - (t_1 * ((Math.sin(lambda1) * Math.sin(lambda2)) + (Math.cos(lambda2) * Math.cos(lambda1))))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.cos(phi2) * math.sin(phi1) tmp = 0 if (lambda1 <= -2450000000.0) or not (lambda1 <= 1.4e+30): tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (math.cos(lambda1) * t_1))) else: tmp = math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (t_0 - (t_1 * ((math.sin(lambda1) * math.sin(lambda2)) + (math.cos(lambda2) * math.cos(lambda1)))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = Float64(cos(phi2) * sin(phi1)) tmp = 0.0 if ((lambda1 <= -2450000000.0) || !(lambda1 <= 1.4e+30)) tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(cos(lambda1) * t_1))); else tmp = atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(t_0 - Float64(t_1 * Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda2) * cos(lambda1)))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = cos(phi2) * sin(phi1); tmp = 0.0; if ((lambda1 <= -2450000000.0) || ~((lambda1 <= 1.4e+30))) tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (cos(lambda1) * t_1))); else tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - (t_1 * ((sin(lambda1) * sin(lambda2)) + (cos(lambda2) * cos(lambda1)))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[lambda1, -2450000000.0], N[Not[LessEqual[lambda1, 1.4e+30]], $MachinePrecision]], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[Cos[lambda1], $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(t$95$1 * N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\lambda_1 \leq -2450000000 \lor \neg \left(\lambda_1 \leq 1.4 \cdot 10^{+30}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \cos \lambda_1 \cdot t\_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{t\_0 - t\_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_2 \cdot \cos \lambda_1\right)}\\
\end{array}
\end{array}
if lambda1 < -2.45e9 or 1.39999999999999992e30 < lambda1 Initial program 62.4%
sin-diff74.7%
Applied egg-rr74.7%
Taylor expanded in lambda2 around 0 74.9%
if -2.45e9 < lambda1 < 1.39999999999999992e30Initial program 96.7%
cos-diff99.8%
+-commutative99.8%
*-commutative99.8%
Applied egg-rr96.8%
Final simplification86.8%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))) (t_1 (* (cos phi2) (sin phi1))))
(if (or (<= lambda1 -2200000000.0) (not (<= lambda1 3.4e-34)))
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* (cos lambda1) t_1)))
(atan2
(expm1 (log1p (* (cos phi2) (sin (- lambda1 lambda2)))))
(- t_0 (* t_1 (cos (- lambda1 lambda2))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = cos(phi2) * sin(phi1);
double tmp;
if ((lambda1 <= -2200000000.0) || !(lambda1 <= 3.4e-34)) {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (cos(lambda1) * t_1)));
} else {
tmp = atan2(expm1(log1p((cos(phi2) * sin((lambda1 - lambda2))))), (t_0 - (t_1 * cos((lambda1 - lambda2)))));
}
return tmp;
}
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.cos(phi2) * Math.sin(phi1);
double tmp;
if ((lambda1 <= -2200000000.0) || !(lambda1 <= 3.4e-34)) {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (Math.cos(lambda1) * t_1)));
} else {
tmp = Math.atan2(Math.expm1(Math.log1p((Math.cos(phi2) * Math.sin((lambda1 - lambda2))))), (t_0 - (t_1 * Math.cos((lambda1 - lambda2)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.cos(phi2) * math.sin(phi1) tmp = 0 if (lambda1 <= -2200000000.0) or not (lambda1 <= 3.4e-34): tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (math.cos(lambda1) * t_1))) else: tmp = math.atan2(math.expm1(math.log1p((math.cos(phi2) * math.sin((lambda1 - lambda2))))), (t_0 - (t_1 * math.cos((lambda1 - lambda2))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = Float64(cos(phi2) * sin(phi1)) tmp = 0.0 if ((lambda1 <= -2200000000.0) || !(lambda1 <= 3.4e-34)) tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(cos(lambda1) * t_1))); else tmp = atan(expm1(log1p(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))))), Float64(t_0 - Float64(t_1 * cos(Float64(lambda1 - lambda2))))); end return tmp end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[lambda1, -2200000000.0], N[Not[LessEqual[lambda1, 3.4e-34]], $MachinePrecision]], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[Cos[lambda1], $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(Exp[N[Log[1 + N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]] - 1), $MachinePrecision] / N[(t$95$0 - N[(t$95$1 * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\lambda_1 \leq -2200000000 \lor \neg \left(\lambda_1 \leq 3.4 \cdot 10^{-34}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \cos \lambda_1 \cdot t\_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\right)\right)}{t\_0 - t\_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\end{array}
\end{array}
if lambda1 < -2.2e9 or 3.4000000000000001e-34 < lambda1 Initial program 63.9%
sin-diff75.3%
Applied egg-rr75.3%
Taylor expanded in lambda2 around 0 74.2%
if -2.2e9 < lambda1 < 3.4000000000000001e-34Initial program 97.9%
expm1-log1p-u97.9%
Applied egg-rr97.9%
Final simplification86.1%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))))
(if (or (<= lambda2 -9.5e+137) (not (<= lambda2 3.6e-63)))
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* (sin phi1) (* (cos lambda2) (cos phi2)))))
(atan2
(* (cos phi2) (sin (- lambda1 lambda2)))
(- t_0 (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double tmp;
if ((lambda2 <= -9.5e+137) || !(lambda2 <= 3.6e-63)) {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (sin(phi1) * (cos(lambda2) * cos(phi2)))));
} else {
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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(phi1) * sin(phi2)
if ((lambda2 <= (-9.5d+137)) .or. (.not. (lambda2 <= 3.6d-63))) then
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (sin(phi1) * (cos(lambda2) * cos(phi2)))))
else
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if ((lambda2 <= -9.5e+137) || !(lambda2 <= 3.6e-63)) {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (Math.sin(phi1) * (Math.cos(lambda2) * Math.cos(phi2)))));
} else {
tmp = Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) tmp = 0 if (lambda2 <= -9.5e+137) or not (lambda2 <= 3.6e-63): tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (math.sin(phi1) * (math.cos(lambda2) * math.cos(phi2))))) else: tmp = math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (t_0 - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if ((lambda2 <= -9.5e+137) || !(lambda2 <= 3.6e-63)) tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(sin(phi1) * Float64(cos(lambda2) * cos(phi2))))); else tmp = atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); tmp = 0.0; if ((lambda2 <= -9.5e+137) || ~((lambda2 <= 3.6e-63))) tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (sin(phi1) * (cos(lambda2) * cos(phi2))))); else tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[lambda2, -9.5e+137], N[Not[LessEqual[lambda2, 3.6e-63]], $MachinePrecision]], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\lambda_2 \leq -9.5 \cdot 10^{+137} \lor \neg \left(\lambda_2 \leq 3.6 \cdot 10^{-63}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \sin \phi_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\end{array}
\end{array}
if lambda2 < -9.50000000000000031e137 or 3.60000000000000008e-63 < lambda2 Initial program 69.6%
sin-diff80.1%
Applied egg-rr80.1%
Taylor expanded in lambda1 around 0 77.6%
*-commutative77.6%
*-commutative77.6%
associate-*l*77.6%
cos-neg77.6%
Simplified77.6%
if -9.50000000000000031e137 < lambda2 < 3.60000000000000008e-63Initial program 89.5%
Final simplification84.4%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2))) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
Initial program 81.0%
sin-diff86.8%
Applied egg-rr86.8%
Final simplification86.8%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2)))
(t_1 (cos (- lambda1 lambda2)))
(t_2 (- t_0 (* (* (cos phi2) (sin phi1)) t_1)))
(t_3 (sin (- lambda1 lambda2))))
(if (<= phi1 -4.8e+24)
(atan2 (* (cos phi2) (log1p (expm1 t_3))) t_2)
(if (<= phi1 2.7e-50)
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* (sin phi1) t_1)))
(atan2 (* (cos phi2) t_3) t_2)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = cos((lambda1 - lambda2));
double t_2 = t_0 - ((cos(phi2) * sin(phi1)) * t_1);
double t_3 = sin((lambda1 - lambda2));
double tmp;
if (phi1 <= -4.8e+24) {
tmp = atan2((cos(phi2) * log1p(expm1(t_3))), t_2);
} else if (phi1 <= 2.7e-50) {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (sin(phi1) * t_1)));
} else {
tmp = atan2((cos(phi2) * t_3), t_2);
}
return tmp;
}
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.cos((lambda1 - lambda2));
double t_2 = t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * t_1);
double t_3 = Math.sin((lambda1 - lambda2));
double tmp;
if (phi1 <= -4.8e+24) {
tmp = Math.atan2((Math.cos(phi2) * Math.log1p(Math.expm1(t_3))), t_2);
} else if (phi1 <= 2.7e-50) {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (Math.sin(phi1) * t_1)));
} else {
tmp = Math.atan2((Math.cos(phi2) * t_3), t_2);
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.cos((lambda1 - lambda2)) t_2 = t_0 - ((math.cos(phi2) * math.sin(phi1)) * t_1) t_3 = math.sin((lambda1 - lambda2)) tmp = 0 if phi1 <= -4.8e+24: tmp = math.atan2((math.cos(phi2) * math.log1p(math.expm1(t_3))), t_2) elif phi1 <= 2.7e-50: tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (math.sin(phi1) * t_1))) else: tmp = math.atan2((math.cos(phi2) * t_3), t_2) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = cos(Float64(lambda1 - lambda2)) t_2 = Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * t_1)) t_3 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= -4.8e+24) tmp = atan(Float64(cos(phi2) * log1p(expm1(t_3))), t_2); elseif (phi1 <= 2.7e-50) tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(sin(phi1) * t_1))); else tmp = atan(Float64(cos(phi2) * t_3), t_2); end return tmp end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -4.8e+24], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Log[1 + N[(Exp[t$95$3] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / t$95$2], $MachinePrecision], If[LessEqual[phi1, 2.7e-50], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$3), $MachinePrecision] / t$95$2], $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_2 := t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot t\_1\\
t_3 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -4.8 \cdot 10^{+24}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(t\_3\right)\right)}{t\_2}\\
\mathbf{elif}\;\phi_1 \leq 2.7 \cdot 10^{-50}:\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \sin \phi_1 \cdot t\_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot t\_3}{t\_2}\\
\end{array}
\end{array}
if phi1 < -4.8000000000000001e24Initial program 75.2%
log1p-expm1-u75.2%
Applied egg-rr75.2%
if -4.8000000000000001e24 < phi1 < 2.7e-50Initial program 90.0%
sin-diff98.4%
Applied egg-rr98.4%
Taylor expanded in phi2 around 0 97.2%
if 2.7e-50 < phi1 Initial program 70.9%
Final simplification84.4%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2)))
(t_1 (- t_0 (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2)))))
(t_2 (sin (- lambda1 lambda2))))
(if (<= phi1 -1.9e-7)
(atan2 (* (cos phi2) (log1p (expm1 t_2))) t_1)
(if (<= phi1 3e-51)
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* phi1 (cos (- lambda2 lambda1)))))
(atan2 (* (cos phi2) t_2) t_1)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)));
double t_2 = sin((lambda1 - lambda2));
double tmp;
if (phi1 <= -1.9e-7) {
tmp = atan2((cos(phi2) * log1p(expm1(t_2))), t_1);
} else if (phi1 <= 3e-51) {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (phi1 * cos((lambda2 - lambda1)))));
} else {
tmp = atan2((cos(phi2) * t_2), t_1);
}
return tmp;
}
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)));
double t_2 = Math.sin((lambda1 - lambda2));
double tmp;
if (phi1 <= -1.9e-7) {
tmp = Math.atan2((Math.cos(phi2) * Math.log1p(Math.expm1(t_2))), t_1);
} else if (phi1 <= 3e-51) {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (phi1 * Math.cos((lambda2 - lambda1)))));
} else {
tmp = Math.atan2((Math.cos(phi2) * t_2), t_1);
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = t_0 - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2))) t_2 = math.sin((lambda1 - lambda2)) tmp = 0 if phi1 <= -1.9e-7: tmp = math.atan2((math.cos(phi2) * math.log1p(math.expm1(t_2))), t_1) elif phi1 <= 3e-51: tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (phi1 * math.cos((lambda2 - lambda1))))) else: tmp = math.atan2((math.cos(phi2) * t_2), t_1) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2)))) t_2 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= -1.9e-7) tmp = atan(Float64(cos(phi2) * log1p(expm1(t_2))), t_1); elseif (phi1 <= 3e-51) tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); else tmp = atan(Float64(cos(phi2) * t_2), t_1); end return tmp end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -1.9e-7], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Log[1 + N[(Exp[t$95$2] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / t$95$1], $MachinePrecision], If[LessEqual[phi1, 3e-51], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$2), $MachinePrecision] / t$95$1], $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\\
t_2 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -1.9 \cdot 10^{-7}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(t\_2\right)\right)}{t\_1}\\
\mathbf{elif}\;\phi_1 \leq 3 \cdot 10^{-51}:\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot t\_2}{t\_1}\\
\end{array}
\end{array}
if phi1 < -1.90000000000000007e-7Initial program 75.4%
log1p-expm1-u75.4%
Applied egg-rr75.4%
if -1.90000000000000007e-7 < phi1 < 3.00000000000000002e-51Initial program 91.4%
Taylor expanded in phi2 around 0 91.1%
sub-neg91.1%
remove-double-neg91.1%
mul-1-neg91.1%
distribute-neg-in91.1%
+-commutative91.1%
cos-neg91.1%
mul-1-neg91.1%
unsub-neg91.1%
Simplified91.1%
Taylor expanded in phi1 around 0 91.1%
sin-diff99.4%
Applied egg-rr99.1%
if 3.00000000000000002e-51 < phi1 Initial program 70.0%
Final simplification84.5%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))))
(if (or (<= phi1 -1.7e-7) (not (<= phi1 3.8e-51)))
(atan2
(* (cos phi2) (sin (- lambda1 lambda2)))
(- t_0 (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2)))))
(atan2
(*
(- (* (sin lambda1) (cos lambda2)) (* (cos lambda1) (sin lambda2)))
(cos phi2))
(- t_0 (* phi1 (cos (- lambda2 lambda1))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double tmp;
if ((phi1 <= -1.7e-7) || !(phi1 <= 3.8e-51)) {
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (phi1 * cos((lambda2 - lambda1)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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(phi1) * sin(phi2)
if ((phi1 <= (-1.7d-7)) .or. (.not. (phi1 <= 3.8d-51))) then
tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
else
tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (phi1 * cos((lambda2 - lambda1)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if ((phi1 <= -1.7e-7) || !(phi1 <= 3.8e-51)) {
tmp = Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2((((Math.sin(lambda1) * Math.cos(lambda2)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), (t_0 - (phi1 * Math.cos((lambda2 - lambda1)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) tmp = 0 if (phi1 <= -1.7e-7) or not (phi1 <= 3.8e-51): tmp = math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (t_0 - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2((((math.sin(lambda1) * math.cos(lambda2)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), (t_0 - (phi1 * math.cos((lambda2 - lambda1))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if ((phi1 <= -1.7e-7) || !(phi1 <= 3.8e-51)) tmp = atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(Float64(Float64(Float64(sin(lambda1) * cos(lambda2)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(t_0 - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); tmp = 0.0; if ((phi1 <= -1.7e-7) || ~((phi1 <= 3.8e-51))) tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), (t_0 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); else tmp = atan2((((sin(lambda1) * cos(lambda2)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), (t_0 - (phi1 * cos((lambda2 - lambda1))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[phi1, -1.7e-7], N[Not[LessEqual[phi1, 3.8e-51]], $MachinePrecision]], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\phi_1 \leq -1.7 \cdot 10^{-7} \lor \neg \left(\phi_1 \leq 3.8 \cdot 10^{-51}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{t\_0 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\end{array}
\end{array}
if phi1 < -1.69999999999999987e-7 or 3.80000000000000003e-51 < phi1 Initial program 72.5%
if -1.69999999999999987e-7 < phi1 < 3.80000000000000003e-51Initial program 91.4%
Taylor expanded in phi2 around 0 91.1%
sub-neg91.1%
remove-double-neg91.1%
mul-1-neg91.1%
distribute-neg-in91.1%
+-commutative91.1%
cos-neg91.1%
mul-1-neg91.1%
unsub-neg91.1%
Simplified91.1%
Taylor expanded in phi1 around 0 91.1%
sin-diff99.4%
Applied egg-rr99.1%
Final simplification84.5%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi2) (sin (- lambda1 lambda2))))
(t_1 (* (cos phi1) (sin phi2)))
(t_2 (- t_1 (* (sin phi1) (* (cos lambda2) (cos phi2))))))
(if (<= lambda2 -7.5e+78)
(atan2 (* (sin lambda2) (- (cos phi2))) t_2)
(if (<= lambda2 1.25e-16)
(atan2 t_0 (- t_1 (* (sin phi1) (* (cos lambda1) (cos phi2)))))
(atan2 t_0 t_2)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi2) * sin((lambda1 - lambda2));
double t_1 = cos(phi1) * sin(phi2);
double t_2 = t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2)));
double tmp;
if (lambda2 <= -7.5e+78) {
tmp = atan2((sin(lambda2) * -cos(phi2)), t_2);
} else if (lambda2 <= 1.25e-16) {
tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda1) * cos(phi2)))));
} else {
tmp = atan2(t_0, t_2);
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = cos(phi2) * sin((lambda1 - lambda2))
t_1 = cos(phi1) * sin(phi2)
t_2 = t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2)))
if (lambda2 <= (-7.5d+78)) then
tmp = atan2((sin(lambda2) * -cos(phi2)), t_2)
else if (lambda2 <= 1.25d-16) then
tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda1) * cos(phi2)))))
else
tmp = atan2(t_0, t_2)
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi2) * Math.sin((lambda1 - lambda2));
double t_1 = Math.cos(phi1) * Math.sin(phi2);
double t_2 = t_1 - (Math.sin(phi1) * (Math.cos(lambda2) * Math.cos(phi2)));
double tmp;
if (lambda2 <= -7.5e+78) {
tmp = Math.atan2((Math.sin(lambda2) * -Math.cos(phi2)), t_2);
} else if (lambda2 <= 1.25e-16) {
tmp = Math.atan2(t_0, (t_1 - (Math.sin(phi1) * (Math.cos(lambda1) * Math.cos(phi2)))));
} else {
tmp = Math.atan2(t_0, t_2);
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi2) * math.sin((lambda1 - lambda2)) t_1 = math.cos(phi1) * math.sin(phi2) t_2 = t_1 - (math.sin(phi1) * (math.cos(lambda2) * math.cos(phi2))) tmp = 0 if lambda2 <= -7.5e+78: tmp = math.atan2((math.sin(lambda2) * -math.cos(phi2)), t_2) elif lambda2 <= 1.25e-16: tmp = math.atan2(t_0, (t_1 - (math.sin(phi1) * (math.cos(lambda1) * math.cos(phi2))))) else: tmp = math.atan2(t_0, t_2) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) t_1 = Float64(cos(phi1) * sin(phi2)) t_2 = Float64(t_1 - Float64(sin(phi1) * Float64(cos(lambda2) * cos(phi2)))) tmp = 0.0 if (lambda2 <= -7.5e+78) tmp = atan(Float64(sin(lambda2) * Float64(-cos(phi2))), t_2); elseif (lambda2 <= 1.25e-16) tmp = atan(t_0, Float64(t_1 - Float64(sin(phi1) * Float64(cos(lambda1) * cos(phi2))))); else tmp = atan(t_0, t_2); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi2) * sin((lambda1 - lambda2)); t_1 = cos(phi1) * sin(phi2); t_2 = t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2))); tmp = 0.0; if (lambda2 <= -7.5e+78) tmp = atan2((sin(lambda2) * -cos(phi2)), t_2); elseif (lambda2 <= 1.25e-16) tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda1) * cos(phi2))))); else tmp = atan2(t_0, t_2); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 - N[(N[Sin[phi1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda2, -7.5e+78], N[ArcTan[N[(N[Sin[lambda2], $MachinePrecision] * (-N[Cos[phi2], $MachinePrecision])), $MachinePrecision] / t$95$2], $MachinePrecision], If[LessEqual[lambda2, 1.25e-16], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Sin[phi1], $MachinePrecision] * N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$0 / t$95$2], $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \sin \phi_2\\
t_2 := t\_1 - \sin \phi_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)\\
\mathbf{if}\;\lambda_2 \leq -7.5 \cdot 10^{+78}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_2 \cdot \left(-\cos \phi_2\right)}{t\_2}\\
\mathbf{elif}\;\lambda_2 \leq 1.25 \cdot 10^{-16}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \sin \phi_1 \cdot \left(\cos \lambda_1 \cdot \cos \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_2}\\
\end{array}
\end{array}
if lambda2 < -7.49999999999999934e78Initial program 60.3%
sin-diff71.1%
Applied egg-rr71.1%
cos-diff99.8%
+-commutative99.8%
*-commutative99.8%
Applied egg-rr99.8%
Taylor expanded in lambda1 around 0 61.4%
mul-1-neg61.4%
distribute-rgt-neg-in61.4%
Simplified61.4%
Taylor expanded in lambda1 around 0 60.4%
associate-*r*60.4%
Simplified60.4%
if -7.49999999999999934e78 < lambda2 < 1.2500000000000001e-16Initial program 93.0%
Taylor expanded in lambda2 around 0 91.9%
Taylor expanded in lambda2 around 0 92.1%
associate-*r*92.1%
*-commutative92.1%
Simplified92.1%
if 1.2500000000000001e-16 < lambda2 Initial program 71.2%
Taylor expanded in lambda1 around 0 69.3%
*-commutative80.5%
*-commutative80.5%
associate-*l*80.5%
cos-neg80.5%
Simplified69.3%
Final simplification80.0%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi2) (sin (- lambda1 lambda2))))
(t_1 (* (cos phi1) (sin phi2))))
(if (<= lambda1 -2.7e+109)
(atan2
(* (sin lambda1) (cos phi2))
(- t_1 (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2)))))
(if (<= lambda1 3.6e-38)
(atan2 t_0 (- t_1 (* (sin phi1) (* (cos lambda2) (cos phi2)))))
(atan2 t_0 (- t_1 (* (sin phi1) (cos (- lambda2 lambda1)))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi2) * sin((lambda1 - lambda2));
double t_1 = cos(phi1) * sin(phi2);
double tmp;
if (lambda1 <= -2.7e+109) {
tmp = atan2((sin(lambda1) * cos(phi2)), (t_1 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
} else if (lambda1 <= 3.6e-38) {
tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2)))));
} else {
tmp = atan2(t_0, (t_1 - (sin(phi1) * cos((lambda2 - lambda1)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi2) * sin((lambda1 - lambda2))
t_1 = cos(phi1) * sin(phi2)
if (lambda1 <= (-2.7d+109)) then
tmp = atan2((sin(lambda1) * cos(phi2)), (t_1 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
else if (lambda1 <= 3.6d-38) then
tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2)))))
else
tmp = atan2(t_0, (t_1 - (sin(phi1) * cos((lambda2 - lambda1)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi2) * Math.sin((lambda1 - lambda2));
double t_1 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if (lambda1 <= -2.7e+109) {
tmp = Math.atan2((Math.sin(lambda1) * Math.cos(phi2)), (t_1 - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
} else if (lambda1 <= 3.6e-38) {
tmp = Math.atan2(t_0, (t_1 - (Math.sin(phi1) * (Math.cos(lambda2) * Math.cos(phi2)))));
} else {
tmp = Math.atan2(t_0, (t_1 - (Math.sin(phi1) * Math.cos((lambda2 - lambda1)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi2) * math.sin((lambda1 - lambda2)) t_1 = math.cos(phi1) * math.sin(phi2) tmp = 0 if lambda1 <= -2.7e+109: tmp = math.atan2((math.sin(lambda1) * math.cos(phi2)), (t_1 - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2))))) elif lambda1 <= 3.6e-38: tmp = math.atan2(t_0, (t_1 - (math.sin(phi1) * (math.cos(lambda2) * math.cos(phi2))))) else: tmp = math.atan2(t_0, (t_1 - (math.sin(phi1) * math.cos((lambda2 - lambda1))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) t_1 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if (lambda1 <= -2.7e+109) tmp = atan(Float64(sin(lambda1) * cos(phi2)), Float64(t_1 - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))); elseif (lambda1 <= 3.6e-38) tmp = atan(t_0, Float64(t_1 - Float64(sin(phi1) * Float64(cos(lambda2) * cos(phi2))))); else tmp = atan(t_0, Float64(t_1 - Float64(sin(phi1) * cos(Float64(lambda2 - lambda1))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi2) * sin((lambda1 - lambda2)); t_1 = cos(phi1) * sin(phi2); tmp = 0.0; if (lambda1 <= -2.7e+109) tmp = atan2((sin(lambda1) * cos(phi2)), (t_1 - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); elseif (lambda1 <= 3.6e-38) tmp = atan2(t_0, (t_1 - (sin(phi1) * (cos(lambda2) * cos(phi2))))); else tmp = atan2(t_0, (t_1 - (sin(phi1) * cos((lambda2 - lambda1))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda1, -2.7e+109], N[ArcTan[N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(t$95$1 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], If[LessEqual[lambda1, 3.6e-38], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Sin[phi1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\lambda_1 \leq -2.7 \cdot 10^{+109}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1 \cdot \cos \phi_2}{t\_1 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{elif}\;\lambda_1 \leq 3.6 \cdot 10^{-38}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \sin \phi_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \sin \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\end{array}
\end{array}
if lambda1 < -2.70000000000000001e109Initial program 64.6%
Taylor expanded in lambda2 around 0 67.8%
if -2.70000000000000001e109 < lambda1 < 3.6000000000000001e-38Initial program 91.9%
Taylor expanded in lambda1 around 0 90.3%
*-commutative92.7%
*-commutative92.7%
associate-*l*92.7%
cos-neg92.7%
Simplified90.3%
if 3.6000000000000001e-38 < lambda1 Initial program 66.1%
Taylor expanded in phi2 around 0 58.3%
sub-neg58.3%
remove-double-neg58.3%
mul-1-neg58.3%
distribute-neg-in58.3%
+-commutative58.3%
cos-neg58.3%
mul-1-neg58.3%
unsub-neg58.3%
Simplified58.3%
Final simplification78.5%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (- (* (cos phi1) (sin phi2)) (* (* (cos phi2) (sin phi1)) (cos (- lambda1 lambda2))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.cos(phi2) * Math.sin(phi1)) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), ((math.cos(phi1) * math.sin(phi2)) - ((math.cos(phi2) * math.sin(phi1)) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(cos(phi2) * sin(phi1)) * cos(Float64(lambda1 - lambda2))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
Initial program 81.0%
Final simplification81.0%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2)))
(t_1 (* (cos phi2) (sin (- lambda1 lambda2)))))
(if (or (<= (- lambda1 lambda2) -1e+21)
(not (<= (- lambda1 lambda2) 5e-16)))
(atan2 t_1 (- t_0 (* (sin phi1) (cos (- lambda2 lambda1)))))
(atan2
t_1
(- t_0 (* (* (cos phi2) (sin phi1)) (+ (* lambda1 lambda2) 1.0)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = cos(phi2) * sin((lambda1 - lambda2));
double tmp;
if (((lambda1 - lambda2) <= -1e+21) || !((lambda1 - lambda2) <= 5e-16)) {
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda2 - lambda1)))));
} else {
tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * ((lambda1 * lambda2) + 1.0))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = cos(phi2) * sin((lambda1 - lambda2))
if (((lambda1 - lambda2) <= (-1d+21)) .or. (.not. ((lambda1 - lambda2) <= 5d-16))) then
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda2 - lambda1)))))
else
tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * ((lambda1 * lambda2) + 1.0d0))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.cos(phi2) * Math.sin((lambda1 - lambda2));
double tmp;
if (((lambda1 - lambda2) <= -1e+21) || !((lambda1 - lambda2) <= 5e-16)) {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * Math.cos((lambda2 - lambda1)))));
} else {
tmp = Math.atan2(t_1, (t_0 - ((Math.cos(phi2) * Math.sin(phi1)) * ((lambda1 * lambda2) + 1.0))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.cos(phi2) * math.sin((lambda1 - lambda2)) tmp = 0 if ((lambda1 - lambda2) <= -1e+21) or not ((lambda1 - lambda2) <= 5e-16): tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * math.cos((lambda2 - lambda1))))) else: tmp = math.atan2(t_1, (t_0 - ((math.cos(phi2) * math.sin(phi1)) * ((lambda1 * lambda2) + 1.0)))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) tmp = 0.0 if ((Float64(lambda1 - lambda2) <= -1e+21) || !(Float64(lambda1 - lambda2) <= 5e-16)) tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * cos(Float64(lambda2 - lambda1))))); else tmp = atan(t_1, Float64(t_0 - Float64(Float64(cos(phi2) * sin(phi1)) * Float64(Float64(lambda1 * lambda2) + 1.0)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = cos(phi2) * sin((lambda1 - lambda2)); tmp = 0.0; if (((lambda1 - lambda2) <= -1e+21) || ~(((lambda1 - lambda2) <= 5e-16))) tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda2 - lambda1))))); else tmp = atan2(t_1, (t_0 - ((cos(phi2) * sin(phi1)) * ((lambda1 * lambda2) + 1.0)))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -1e+21], N[Not[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 5e-16]], $MachinePrecision]], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[(N[(lambda1 * lambda2), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -1 \cdot 10^{+21} \lor \neg \left(\lambda_1 - \lambda_2 \leq 5 \cdot 10^{-16}\right):\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \left(\lambda_1 \cdot \lambda_2 + 1\right)}\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -1e21 or 5.0000000000000004e-16 < (-.f64 lambda1 lambda2) Initial program 74.6%
Taylor expanded in phi2 around 0 64.2%
sub-neg64.2%
remove-double-neg64.2%
mul-1-neg64.2%
distribute-neg-in64.2%
+-commutative64.2%
cos-neg64.2%
mul-1-neg64.2%
unsub-neg64.2%
Simplified64.2%
if -1e21 < (-.f64 lambda1 lambda2) < 5.0000000000000004e-16Initial program 99.7%
Taylor expanded in lambda2 around 0 98.7%
Taylor expanded in lambda1 around 0 97.4%
associate-*r*97.4%
distribute-lft1-in97.4%
Simplified97.4%
Final simplification72.6%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))) (t_1 (sin (- lambda1 lambda2))))
(if (or (<= phi2 -26.0) (not (<= phi2 3.3e-135)))
(atan2 (* (cos phi2) t_1) (- t_0 (* (cos lambda1) (sin phi1))))
(atan2 t_1 (- t_0 (* (sin phi1) (cos (- lambda1 lambda2))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = sin((lambda1 - lambda2));
double tmp;
if ((phi2 <= -26.0) || !(phi2 <= 3.3e-135)) {
tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * sin(phi1))));
} else {
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = sin((lambda1 - lambda2))
if ((phi2 <= (-26.0d0)) .or. (.not. (phi2 <= 3.3d-135))) then
tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * sin(phi1))))
else
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.sin((lambda1 - lambda2));
double tmp;
if ((phi2 <= -26.0) || !(phi2 <= 3.3e-135)) {
tmp = Math.atan2((Math.cos(phi2) * t_1), (t_0 - (Math.cos(lambda1) * Math.sin(phi1))));
} else {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * Math.cos((lambda1 - lambda2)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.sin((lambda1 - lambda2)) tmp = 0 if (phi2 <= -26.0) or not (phi2 <= 3.3e-135): tmp = math.atan2((math.cos(phi2) * t_1), (t_0 - (math.cos(lambda1) * math.sin(phi1)))) else: tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * math.cos((lambda1 - lambda2))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if ((phi2 <= -26.0) || !(phi2 <= 3.3e-135)) tmp = atan(Float64(cos(phi2) * t_1), Float64(t_0 - Float64(cos(lambda1) * sin(phi1)))); else tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * cos(Float64(lambda1 - lambda2))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = sin((lambda1 - lambda2)); tmp = 0.0; if ((phi2 <= -26.0) || ~((phi2 <= 3.3e-135))) tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * sin(phi1)))); else tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[phi2, -26.0], N[Not[LessEqual[phi2, 3.3e-135]], $MachinePrecision]], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision] / N[(t$95$0 - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq -26 \lor \neg \left(\phi_2 \leq 3.3 \cdot 10^{-135}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot t\_1}{t\_0 - \cos \lambda_1 \cdot \sin \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\end{array}
\end{array}
if phi2 < -26 or 3.2999999999999999e-135 < phi2 Initial program 83.2%
Taylor expanded in phi2 around 0 60.5%
sub-neg60.5%
remove-double-neg60.5%
mul-1-neg60.5%
distribute-neg-in60.5%
+-commutative60.5%
cos-neg60.5%
mul-1-neg60.5%
unsub-neg60.5%
Simplified60.5%
Taylor expanded in lambda2 around 0 57.9%
cos-neg57.9%
Simplified57.9%
if -26 < phi2 < 3.2999999999999999e-135Initial program 77.9%
add-sqr-sqrt48.3%
sqrt-unprod49.4%
pow249.4%
Applied egg-rr49.4%
Taylor expanded in phi2 around 0 77.3%
Taylor expanded in phi2 around 0 77.3%
Final simplification65.8%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2)))
(t_1 (sin (- lambda1 lambda2)))
(t_2 (* (cos phi2) t_1)))
(if (<= phi2 -26.0)
(atan2 t_2 (- t_0 (* (cos lambda2) (sin phi1))))
(if (<= phi2 1.02e-53)
(atan2 t_1 (- t_0 (* (sin phi1) (cos (- lambda1 lambda2)))))
(atan2 t_2 (- t_0 (* (cos lambda1) (sin phi1))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = sin((lambda1 - lambda2));
double t_2 = cos(phi2) * t_1;
double tmp;
if (phi2 <= -26.0) {
tmp = atan2(t_2, (t_0 - (cos(lambda2) * sin(phi1))));
} else if (phi2 <= 1.02e-53) {
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2(t_2, (t_0 - (cos(lambda1) * sin(phi1))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = sin((lambda1 - lambda2))
t_2 = cos(phi2) * t_1
if (phi2 <= (-26.0d0)) then
tmp = atan2(t_2, (t_0 - (cos(lambda2) * sin(phi1))))
else if (phi2 <= 1.02d-53) then
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))))
else
tmp = atan2(t_2, (t_0 - (cos(lambda1) * sin(phi1))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.sin((lambda1 - lambda2));
double t_2 = Math.cos(phi2) * t_1;
double tmp;
if (phi2 <= -26.0) {
tmp = Math.atan2(t_2, (t_0 - (Math.cos(lambda2) * Math.sin(phi1))));
} else if (phi2 <= 1.02e-53) {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2(t_2, (t_0 - (Math.cos(lambda1) * Math.sin(phi1))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.sin((lambda1 - lambda2)) t_2 = math.cos(phi2) * t_1 tmp = 0 if phi2 <= -26.0: tmp = math.atan2(t_2, (t_0 - (math.cos(lambda2) * math.sin(phi1)))) elif phi2 <= 1.02e-53: tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2(t_2, (t_0 - (math.cos(lambda1) * math.sin(phi1)))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = sin(Float64(lambda1 - lambda2)) t_2 = Float64(cos(phi2) * t_1) tmp = 0.0 if (phi2 <= -26.0) tmp = atan(t_2, Float64(t_0 - Float64(cos(lambda2) * sin(phi1)))); elseif (phi2 <= 1.02e-53) tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(t_2, Float64(t_0 - Float64(cos(lambda1) * sin(phi1)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = sin((lambda1 - lambda2)); t_2 = cos(phi2) * t_1; tmp = 0.0; if (phi2 <= -26.0) tmp = atan2(t_2, (t_0 - (cos(lambda2) * sin(phi1)))); elseif (phi2 <= 1.02e-53) tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2))))); else tmp = atan2(t_2, (t_0 - (cos(lambda1) * sin(phi1)))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision]}, If[LessEqual[phi2, -26.0], N[ArcTan[t$95$2 / N[(t$95$0 - N[(N[Cos[lambda2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], If[LessEqual[phi2, 1.02e-53], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$2 / N[(t$95$0 - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \sin \left(\lambda_1 - \lambda_2\right)\\
t_2 := \cos \phi_2 \cdot t\_1\\
\mathbf{if}\;\phi_2 \leq -26:\\
\;\;\;\;\tan^{-1}_* \frac{t\_2}{t\_0 - \cos \lambda_2 \cdot \sin \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 1.02 \cdot 10^{-53}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_2}{t\_0 - \cos \lambda_1 \cdot \sin \phi_1}\\
\end{array}
\end{array}
if phi2 < -26Initial program 87.5%
Taylor expanded in phi2 around 0 65.0%
sub-neg65.0%
remove-double-neg65.0%
mul-1-neg65.0%
distribute-neg-in65.0%
+-commutative65.0%
cos-neg65.0%
mul-1-neg65.0%
unsub-neg65.0%
Simplified65.0%
Taylor expanded in lambda1 around 0 65.2%
if -26 < phi2 < 1.02000000000000002e-53Initial program 78.9%
add-sqr-sqrt47.4%
sqrt-unprod48.5%
pow248.5%
Applied egg-rr48.5%
Taylor expanded in phi2 around 0 78.4%
Taylor expanded in phi2 around 0 78.4%
if 1.02000000000000002e-53 < phi2 Initial program 79.4%
Taylor expanded in phi2 around 0 52.5%
sub-neg52.5%
remove-double-neg52.5%
mul-1-neg52.5%
distribute-neg-in52.5%
+-commutative52.5%
cos-neg52.5%
mul-1-neg52.5%
unsub-neg52.5%
Simplified52.5%
Taylor expanded in lambda2 around 0 51.5%
cos-neg51.5%
Simplified51.5%
Final simplification67.1%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (- (* (cos phi1) (sin phi2)) (* (sin phi1) (cos (- lambda2 lambda1))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - (sin(phi1) * cos((lambda2 - lambda1)))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - (sin(phi1) * cos((lambda2 - lambda1)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), ((Math.cos(phi1) * Math.sin(phi2)) - (Math.sin(phi1) * Math.cos((lambda2 - lambda1)))));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), ((math.cos(phi1) * math.sin(phi2)) - (math.sin(phi1) * math.cos((lambda2 - lambda1)))))
function code(lambda1, lambda2, phi1, phi2) return atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(sin(phi1) * cos(Float64(lambda2 - lambda1))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2((cos(phi2) * sin((lambda1 - lambda2))), ((cos(phi1) * sin(phi2)) - (sin(phi1) * cos((lambda2 - lambda1))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \sin \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}
\end{array}
Initial program 81.0%
Taylor expanded in phi2 around 0 67.6%
sub-neg67.6%
remove-double-neg67.6%
mul-1-neg67.6%
distribute-neg-in67.6%
+-commutative67.6%
cos-neg67.6%
mul-1-neg67.6%
unsub-neg67.6%
Simplified67.6%
Final simplification67.6%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))) (t_1 (sin (- lambda1 lambda2))))
(if (or (<= phi1 -1.85e+30) (not (<= phi1 1.7e-25)))
(atan2 t_1 (- t_0 (* (sin phi1) (cos (- lambda1 lambda2)))))
(atan2 (* (cos phi2) t_1) (- t_0 (* phi1 (cos (- lambda2 lambda1))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = sin((lambda1 - lambda2));
double tmp;
if ((phi1 <= -1.85e+30) || !(phi1 <= 1.7e-25)) {
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2((cos(phi2) * t_1), (t_0 - (phi1 * cos((lambda2 - lambda1)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = sin((lambda1 - lambda2))
if ((phi1 <= (-1.85d+30)) .or. (.not. (phi1 <= 1.7d-25))) then
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))))
else
tmp = atan2((cos(phi2) * t_1), (t_0 - (phi1 * cos((lambda2 - lambda1)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.sin((lambda1 - lambda2));
double tmp;
if ((phi1 <= -1.85e+30) || !(phi1 <= 1.7e-25)) {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2((Math.cos(phi2) * t_1), (t_0 - (phi1 * Math.cos((lambda2 - lambda1)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.sin((lambda1 - lambda2)) tmp = 0 if (phi1 <= -1.85e+30) or not (phi1 <= 1.7e-25): tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2((math.cos(phi2) * t_1), (t_0 - (phi1 * math.cos((lambda2 - lambda1))))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if ((phi1 <= -1.85e+30) || !(phi1 <= 1.7e-25)) tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(Float64(cos(phi2) * t_1), Float64(t_0 - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = sin((lambda1 - lambda2)); tmp = 0.0; if ((phi1 <= -1.85e+30) || ~((phi1 <= 1.7e-25))) tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2))))); else tmp = atan2((cos(phi2) * t_1), (t_0 - (phi1 * cos((lambda2 - lambda1))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[phi1, -1.85e+30], N[Not[LessEqual[phi1, 1.7e-25]], $MachinePrecision]], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision] / N[(t$95$0 - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -1.85 \cdot 10^{+30} \lor \neg \left(\phi_1 \leq 1.7 \cdot 10^{-25}\right):\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot t\_1}{t\_0 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\end{array}
\end{array}
if phi1 < -1.85000000000000008e30 or 1.70000000000000001e-25 < phi1 Initial program 72.7%
add-sqr-sqrt38.3%
sqrt-unprod38.5%
pow238.5%
Applied egg-rr38.5%
Taylor expanded in phi2 around 0 42.2%
Taylor expanded in phi2 around 0 42.5%
if -1.85000000000000008e30 < phi1 < 1.70000000000000001e-25Initial program 89.1%
Taylor expanded in phi2 around 0 86.6%
sub-neg86.6%
remove-double-neg86.6%
mul-1-neg86.6%
distribute-neg-in86.6%
+-commutative86.6%
cos-neg86.6%
mul-1-neg86.6%
unsub-neg86.6%
Simplified86.6%
Taylor expanded in phi1 around 0 84.6%
Final simplification63.9%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (sin phi2))) (t_1 (sin (- lambda1 lambda2))))
(if (or (<= phi1 -4.4e+45) (not (<= phi1 2e-22)))
(atan2 t_1 (- t_0 (* (sin phi1) (cos (- lambda1 lambda2)))))
(atan2 (* (cos phi2) t_1) (- t_0 (* (cos lambda1) phi1))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * sin(phi2);
double t_1 = sin((lambda1 - lambda2));
double tmp;
if ((phi1 <= -4.4e+45) || !(phi1 <= 2e-22)) {
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * phi1)));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = cos(phi1) * sin(phi2)
t_1 = sin((lambda1 - lambda2))
if ((phi1 <= (-4.4d+45)) .or. (.not. (phi1 <= 2d-22))) then
tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2)))))
else
tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * phi1)))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos(phi1) * Math.sin(phi2);
double t_1 = Math.sin((lambda1 - lambda2));
double tmp;
if ((phi1 <= -4.4e+45) || !(phi1 <= 2e-22)) {
tmp = Math.atan2(t_1, (t_0 - (Math.sin(phi1) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2((Math.cos(phi2) * t_1), (t_0 - (Math.cos(lambda1) * phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi1) * math.sin(phi2) t_1 = math.sin((lambda1 - lambda2)) tmp = 0 if (phi1 <= -4.4e+45) or not (phi1 <= 2e-22): tmp = math.atan2(t_1, (t_0 - (math.sin(phi1) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2((math.cos(phi2) * t_1), (t_0 - (math.cos(lambda1) * phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * sin(phi2)) t_1 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if ((phi1 <= -4.4e+45) || !(phi1 <= 2e-22)) tmp = atan(t_1, Float64(t_0 - Float64(sin(phi1) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(Float64(cos(phi2) * t_1), Float64(t_0 - Float64(cos(lambda1) * phi1))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi1) * sin(phi2); t_1 = sin((lambda1 - lambda2)); tmp = 0.0; if ((phi1 <= -4.4e+45) || ~((phi1 <= 2e-22))) tmp = atan2(t_1, (t_0 - (sin(phi1) * cos((lambda1 - lambda2))))); else tmp = atan2((cos(phi2) * t_1), (t_0 - (cos(lambda1) * phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[phi1, -4.4e+45], N[Not[LessEqual[phi1, 2e-22]], $MachinePrecision]], N[ArcTan[t$95$1 / N[(t$95$0 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision] / N[(t$95$0 - N[(N[Cos[lambda1], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \sin \phi_2\\
t_1 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq -4.4 \cdot 10^{+45} \lor \neg \left(\phi_1 \leq 2 \cdot 10^{-22}\right):\\
\;\;\;\;\tan^{-1}_* \frac{t\_1}{t\_0 - \sin \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\cos \phi_2 \cdot t\_1}{t\_0 - \cos \lambda_1 \cdot \phi_1}\\
\end{array}
\end{array}
if phi1 < -4.4000000000000001e45 or 2.0000000000000001e-22 < phi1 Initial program 72.5%
add-sqr-sqrt38.8%
sqrt-unprod39.0%
pow239.0%
Applied egg-rr39.0%
Taylor expanded in phi2 around 0 43.1%
Taylor expanded in phi2 around 0 43.4%
if -4.4000000000000001e45 < phi1 < 2.0000000000000001e-22Initial program 88.4%
Taylor expanded in phi2 around 0 84.9%
sub-neg84.9%
remove-double-neg84.9%
mul-1-neg84.9%
distribute-neg-in84.9%
+-commutative84.9%
cos-neg84.9%
mul-1-neg84.9%
unsub-neg84.9%
Simplified84.9%
Taylor expanded in phi1 around 0 82.1%
Taylor expanded in lambda2 around 0 82.0%
cos-neg82.0%
Simplified82.0%
Final simplification64.1%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin lambda1) (cos phi2))) (t_1 (* (cos phi1) (sin phi2))))
(if (<= phi2 -1.05e+56)
(atan2 t_0 (- t_1 (* (cos lambda2) phi1)))
(if (<= phi2 4.4e-21)
(atan2
(sin (- lambda1 lambda2))
(- t_1 (* (sin phi1) (cos (- lambda1 lambda2)))))
(atan2 t_0 (- t_1 (* (cos lambda1) phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(lambda1) * cos(phi2);
double t_1 = cos(phi1) * sin(phi2);
double tmp;
if (phi2 <= -1.05e+56) {
tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1)));
} else if (phi2 <= 4.4e-21) {
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (sin(phi1) * cos((lambda1 - lambda2)))));
} else {
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = sin(lambda1) * cos(phi2)
t_1 = cos(phi1) * sin(phi2)
if (phi2 <= (-1.05d+56)) then
tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1)))
else if (phi2 <= 4.4d-21) then
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (sin(phi1) * cos((lambda1 - lambda2)))))
else
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.sin(lambda1) * Math.cos(phi2);
double t_1 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if (phi2 <= -1.05e+56) {
tmp = Math.atan2(t_0, (t_1 - (Math.cos(lambda2) * phi1)));
} else if (phi2 <= 4.4e-21) {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), (t_1 - (Math.sin(phi1) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = Math.atan2(t_0, (t_1 - (Math.cos(lambda1) * phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin(lambda1) * math.cos(phi2) t_1 = math.cos(phi1) * math.sin(phi2) tmp = 0 if phi2 <= -1.05e+56: tmp = math.atan2(t_0, (t_1 - (math.cos(lambda2) * phi1))) elif phi2 <= 4.4e-21: tmp = math.atan2(math.sin((lambda1 - lambda2)), (t_1 - (math.sin(phi1) * math.cos((lambda1 - lambda2))))) else: tmp = math.atan2(t_0, (t_1 - (math.cos(lambda1) * phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(lambda1) * cos(phi2)) t_1 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if (phi2 <= -1.05e+56) tmp = atan(t_0, Float64(t_1 - Float64(cos(lambda2) * phi1))); elseif (phi2 <= 4.4e-21) tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(t_1 - Float64(sin(phi1) * cos(Float64(lambda1 - lambda2))))); else tmp = atan(t_0, Float64(t_1 - Float64(cos(lambda1) * phi1))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin(lambda1) * cos(phi2); t_1 = cos(phi1) * sin(phi2); tmp = 0.0; if (phi2 <= -1.05e+56) tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1))); elseif (phi2 <= 4.4e-21) tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (sin(phi1) * cos((lambda1 - lambda2))))); else tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -1.05e+56], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Cos[lambda2], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], If[LessEqual[phi2, 4.4e-21], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(t$95$1 - N[(N[Sin[phi1], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Cos[lambda1], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \lambda_1 \cdot \cos \phi_2\\
t_1 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\phi_2 \leq -1.05 \cdot 10^{+56}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \cos \lambda_2 \cdot \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 4.4 \cdot 10^{-21}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{t\_1 - \sin \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \cos \lambda_1 \cdot \phi_1}\\
\end{array}
\end{array}
if phi2 < -1.05000000000000009e56Initial program 88.1%
Taylor expanded in phi2 around 0 65.5%
sub-neg65.5%
remove-double-neg65.5%
mul-1-neg65.5%
distribute-neg-in65.5%
+-commutative65.5%
cos-neg65.5%
mul-1-neg65.5%
unsub-neg65.5%
Simplified65.5%
Taylor expanded in phi1 around 0 60.4%
Taylor expanded in lambda2 around 0 42.5%
Taylor expanded in lambda1 around 0 42.8%
if -1.05000000000000009e56 < phi2 < 4.4000000000000001e-21Initial program 77.1%
add-sqr-sqrt43.2%
sqrt-unprod44.4%
pow244.4%
Applied egg-rr44.4%
Taylor expanded in phi2 around 0 74.0%
Taylor expanded in phi2 around 0 74.0%
if 4.4000000000000001e-21 < phi2 Initial program 83.1%
Taylor expanded in phi2 around 0 53.2%
sub-neg53.2%
remove-double-neg53.2%
mul-1-neg53.2%
distribute-neg-in53.2%
+-commutative53.2%
cos-neg53.2%
mul-1-neg53.2%
unsub-neg53.2%
Simplified53.2%
Taylor expanded in phi1 around 0 48.7%
Taylor expanded in lambda2 around 0 25.6%
Taylor expanded in lambda2 around 0 25.8%
cos-neg53.1%
Simplified25.8%
Final simplification54.3%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(if (or (<= phi2 -1.7e+16) (not (<= phi2 1.7e-48)))
(atan2
(* (sin lambda1) (cos phi2))
(- (sin phi2) (* phi1 (cos (- lambda2 lambda1)))))
(atan2
(sin (- lambda1 lambda2))
(- (* (cos phi1) (sin phi2)) (* (cos lambda2) (sin phi1))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((phi2 <= -1.7e+16) || !(phi2 <= 1.7e-48)) {
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))));
} else {
tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - (cos(lambda2) * sin(phi1))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if ((phi2 <= (-1.7d+16)) .or. (.not. (phi2 <= 1.7d-48))) then
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))))
else
tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - (cos(lambda2) * sin(phi1))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((phi2 <= -1.7e+16) || !(phi2 <= 1.7e-48)) {
tmp = Math.atan2((Math.sin(lambda1) * Math.cos(phi2)), (Math.sin(phi2) - (phi1 * Math.cos((lambda2 - lambda1)))));
} else {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), ((Math.cos(phi1) * Math.sin(phi2)) - (Math.cos(lambda2) * Math.sin(phi1))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): tmp = 0 if (phi2 <= -1.7e+16) or not (phi2 <= 1.7e-48): tmp = math.atan2((math.sin(lambda1) * math.cos(phi2)), (math.sin(phi2) - (phi1 * math.cos((lambda2 - lambda1))))) else: tmp = math.atan2(math.sin((lambda1 - lambda2)), ((math.cos(phi1) * math.sin(phi2)) - (math.cos(lambda2) * math.sin(phi1)))) return tmp
function code(lambda1, lambda2, phi1, phi2) tmp = 0.0 if ((phi2 <= -1.7e+16) || !(phi2 <= 1.7e-48)) tmp = atan(Float64(sin(lambda1) * cos(phi2)), Float64(sin(phi2) - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); else tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(cos(lambda2) * sin(phi1)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) tmp = 0.0; if ((phi2 <= -1.7e+16) || ~((phi2 <= 1.7e-48))) tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1))))); else tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - (cos(lambda2) * sin(phi1)))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi2, -1.7e+16], N[Not[LessEqual[phi2, 1.7e-48]], $MachinePrecision]], N[ArcTan[N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[Sin[phi2], $MachinePrecision] - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq -1.7 \cdot 10^{+16} \lor \neg \left(\phi_2 \leq 1.7 \cdot 10^{-48}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1 \cdot \cos \phi_2}{\sin \phi_2 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \cos \lambda_2 \cdot \sin \phi_1}\\
\end{array}
\end{array}
if phi2 < -1.7e16 or 1.70000000000000014e-48 < phi2 Initial program 82.7%
Taylor expanded in phi2 around 0 57.0%
sub-neg57.0%
remove-double-neg57.0%
mul-1-neg57.0%
distribute-neg-in57.0%
+-commutative57.0%
cos-neg57.0%
mul-1-neg57.0%
unsub-neg57.0%
Simplified57.0%
Taylor expanded in phi1 around 0 52.2%
Taylor expanded in lambda2 around 0 32.0%
Taylor expanded in phi1 around 0 32.0%
if -1.7e16 < phi2 < 1.70000000000000014e-48Initial program 79.2%
add-sqr-sqrt45.1%
sqrt-unprod46.2%
pow246.2%
Applied egg-rr46.2%
Taylor expanded in phi2 around 0 76.6%
Taylor expanded in lambda1 around 0 69.2%
cos-neg69.2%
Simplified69.2%
Taylor expanded in phi2 around 0 69.2%
Final simplification50.1%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(if (or (<= phi2 -1.6e+55) (not (<= phi2 0.015)))
(atan2
(* (sin lambda1) (cos phi2))
(- (sin phi2) (* phi1 (cos (- lambda2 lambda1)))))
(atan2
(sin (- lambda1 lambda2))
(- (sin phi2) (* (cos lambda2) (* (cos phi2) (sin phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((phi2 <= -1.6e+55) || !(phi2 <= 0.015)) {
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))));
} else {
tmp = atan2(sin((lambda1 - lambda2)), (sin(phi2) - (cos(lambda2) * (cos(phi2) * sin(phi1)))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if ((phi2 <= (-1.6d+55)) .or. (.not. (phi2 <= 0.015d0))) then
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))))
else
tmp = atan2(sin((lambda1 - lambda2)), (sin(phi2) - (cos(lambda2) * (cos(phi2) * sin(phi1)))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((phi2 <= -1.6e+55) || !(phi2 <= 0.015)) {
tmp = Math.atan2((Math.sin(lambda1) * Math.cos(phi2)), (Math.sin(phi2) - (phi1 * Math.cos((lambda2 - lambda1)))));
} else {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), (Math.sin(phi2) - (Math.cos(lambda2) * (Math.cos(phi2) * Math.sin(phi1)))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): tmp = 0 if (phi2 <= -1.6e+55) or not (phi2 <= 0.015): tmp = math.atan2((math.sin(lambda1) * math.cos(phi2)), (math.sin(phi2) - (phi1 * math.cos((lambda2 - lambda1))))) else: tmp = math.atan2(math.sin((lambda1 - lambda2)), (math.sin(phi2) - (math.cos(lambda2) * (math.cos(phi2) * math.sin(phi1))))) return tmp
function code(lambda1, lambda2, phi1, phi2) tmp = 0.0 if ((phi2 <= -1.6e+55) || !(phi2 <= 0.015)) tmp = atan(Float64(sin(lambda1) * cos(phi2)), Float64(sin(phi2) - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); else tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(sin(phi2) - Float64(cos(lambda2) * Float64(cos(phi2) * sin(phi1))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) tmp = 0.0; if ((phi2 <= -1.6e+55) || ~((phi2 <= 0.015))) tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1))))); else tmp = atan2(sin((lambda1 - lambda2)), (sin(phi2) - (cos(lambda2) * (cos(phi2) * sin(phi1))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi2, -1.6e+55], N[Not[LessEqual[phi2, 0.015]], $MachinePrecision]], N[ArcTan[N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[Sin[phi2], $MachinePrecision] - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[Sin[phi2], $MachinePrecision] - N[(N[Cos[lambda2], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq -1.6 \cdot 10^{+55} \lor \neg \left(\phi_2 \leq 0.015\right):\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1 \cdot \cos \phi_2}{\sin \phi_2 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\sin \phi_2 - \cos \lambda_2 \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\\
\end{array}
\end{array}
if phi2 < -1.6000000000000001e55 or 0.014999999999999999 < phi2 Initial program 85.2%
Taylor expanded in phi2 around 0 57.4%
sub-neg57.4%
remove-double-neg57.4%
mul-1-neg57.4%
distribute-neg-in57.4%
+-commutative57.4%
cos-neg57.4%
mul-1-neg57.4%
unsub-neg57.4%
Simplified57.4%
Taylor expanded in phi1 around 0 53.7%
Taylor expanded in lambda2 around 0 33.6%
Taylor expanded in phi1 around 0 33.6%
if -1.6000000000000001e55 < phi2 < 0.014999999999999999Initial program 77.4%
add-sqr-sqrt42.3%
sqrt-unprod43.6%
pow243.6%
Applied egg-rr43.6%
Taylor expanded in phi2 around 0 74.4%
Taylor expanded in lambda1 around 0 66.6%
cos-neg66.6%
Simplified66.6%
Taylor expanded in phi1 around 0 66.4%
Final simplification51.3%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin lambda1) (cos phi2))) (t_1 (* (cos phi1) (sin phi2))))
(if (<= phi2 -2e+56)
(atan2 t_0 (- t_1 (* (cos lambda2) phi1)))
(if (<= phi2 1.7e-48)
(atan2 (sin (- lambda1 lambda2)) (- t_1 (* (cos lambda2) (sin phi1))))
(atan2 t_0 (- t_1 (* (cos lambda1) phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(lambda1) * cos(phi2);
double t_1 = cos(phi1) * sin(phi2);
double tmp;
if (phi2 <= -2e+56) {
tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1)));
} else if (phi2 <= 1.7e-48) {
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1))));
} else {
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = sin(lambda1) * cos(phi2)
t_1 = cos(phi1) * sin(phi2)
if (phi2 <= (-2d+56)) then
tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1)))
else if (phi2 <= 1.7d-48) then
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1))))
else
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.sin(lambda1) * Math.cos(phi2);
double t_1 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if (phi2 <= -2e+56) {
tmp = Math.atan2(t_0, (t_1 - (Math.cos(lambda2) * phi1)));
} else if (phi2 <= 1.7e-48) {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), (t_1 - (Math.cos(lambda2) * Math.sin(phi1))));
} else {
tmp = Math.atan2(t_0, (t_1 - (Math.cos(lambda1) * phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin(lambda1) * math.cos(phi2) t_1 = math.cos(phi1) * math.sin(phi2) tmp = 0 if phi2 <= -2e+56: tmp = math.atan2(t_0, (t_1 - (math.cos(lambda2) * phi1))) elif phi2 <= 1.7e-48: tmp = math.atan2(math.sin((lambda1 - lambda2)), (t_1 - (math.cos(lambda2) * math.sin(phi1)))) else: tmp = math.atan2(t_0, (t_1 - (math.cos(lambda1) * phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(lambda1) * cos(phi2)) t_1 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if (phi2 <= -2e+56) tmp = atan(t_0, Float64(t_1 - Float64(cos(lambda2) * phi1))); elseif (phi2 <= 1.7e-48) tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(t_1 - Float64(cos(lambda2) * sin(phi1)))); else tmp = atan(t_0, Float64(t_1 - Float64(cos(lambda1) * phi1))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin(lambda1) * cos(phi2); t_1 = cos(phi1) * sin(phi2); tmp = 0.0; if (phi2 <= -2e+56) tmp = atan2(t_0, (t_1 - (cos(lambda2) * phi1))); elseif (phi2 <= 1.7e-48) tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1)))); else tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -2e+56], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Cos[lambda2], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], If[LessEqual[phi2, 1.7e-48], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(t$95$1 - N[(N[Cos[lambda2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Cos[lambda1], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \lambda_1 \cdot \cos \phi_2\\
t_1 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\phi_2 \leq -2 \cdot 10^{+56}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \cos \lambda_2 \cdot \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 1.7 \cdot 10^{-48}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{t\_1 - \cos \lambda_2 \cdot \sin \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \cos \lambda_1 \cdot \phi_1}\\
\end{array}
\end{array}
if phi2 < -2.00000000000000018e56Initial program 88.1%
Taylor expanded in phi2 around 0 65.5%
sub-neg65.5%
remove-double-neg65.5%
mul-1-neg65.5%
distribute-neg-in65.5%
+-commutative65.5%
cos-neg65.5%
mul-1-neg65.5%
unsub-neg65.5%
Simplified65.5%
Taylor expanded in phi1 around 0 60.4%
Taylor expanded in lambda2 around 0 42.5%
Taylor expanded in lambda1 around 0 42.8%
if -2.00000000000000018e56 < phi2 < 1.70000000000000014e-48Initial program 78.8%
add-sqr-sqrt45.2%
sqrt-unprod46.5%
pow246.5%
Applied egg-rr46.5%
Taylor expanded in phi2 around 0 75.5%
Taylor expanded in lambda1 around 0 68.3%
cos-neg68.3%
Simplified68.3%
Taylor expanded in phi2 around 0 68.3%
if 1.70000000000000014e-48 < phi2 Initial program 79.9%
Taylor expanded in phi2 around 0 52.4%
sub-neg52.4%
remove-double-neg52.4%
mul-1-neg52.4%
distribute-neg-in52.4%
+-commutative52.4%
cos-neg52.4%
mul-1-neg52.4%
unsub-neg52.4%
Simplified52.4%
Taylor expanded in phi1 around 0 47.9%
Taylor expanded in lambda2 around 0 25.3%
Taylor expanded in lambda2 around 0 25.5%
cos-neg52.3%
Simplified25.5%
Final simplification50.3%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin lambda1) (cos phi2))) (t_1 (* (cos phi1) (sin phi2))))
(if (<= phi2 -1.7e+16)
(atan2 t_0 (- (sin phi2) (* phi1 (cos (- lambda2 lambda1)))))
(if (<= phi2 1.7e-48)
(atan2 (sin (- lambda1 lambda2)) (- t_1 (* (cos lambda2) (sin phi1))))
(atan2 t_0 (- t_1 (* (cos lambda1) phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(lambda1) * cos(phi2);
double t_1 = cos(phi1) * sin(phi2);
double tmp;
if (phi2 <= -1.7e+16) {
tmp = atan2(t_0, (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))));
} else if (phi2 <= 1.7e-48) {
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1))));
} else {
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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) :: t_1
real(8) :: tmp
t_0 = sin(lambda1) * cos(phi2)
t_1 = cos(phi1) * sin(phi2)
if (phi2 <= (-1.7d+16)) then
tmp = atan2(t_0, (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))))
else if (phi2 <= 1.7d-48) then
tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1))))
else
tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1)))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.sin(lambda1) * Math.cos(phi2);
double t_1 = Math.cos(phi1) * Math.sin(phi2);
double tmp;
if (phi2 <= -1.7e+16) {
tmp = Math.atan2(t_0, (Math.sin(phi2) - (phi1 * Math.cos((lambda2 - lambda1)))));
} else if (phi2 <= 1.7e-48) {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), (t_1 - (Math.cos(lambda2) * Math.sin(phi1))));
} else {
tmp = Math.atan2(t_0, (t_1 - (Math.cos(lambda1) * phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin(lambda1) * math.cos(phi2) t_1 = math.cos(phi1) * math.sin(phi2) tmp = 0 if phi2 <= -1.7e+16: tmp = math.atan2(t_0, (math.sin(phi2) - (phi1 * math.cos((lambda2 - lambda1))))) elif phi2 <= 1.7e-48: tmp = math.atan2(math.sin((lambda1 - lambda2)), (t_1 - (math.cos(lambda2) * math.sin(phi1)))) else: tmp = math.atan2(t_0, (t_1 - (math.cos(lambda1) * phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(lambda1) * cos(phi2)) t_1 = Float64(cos(phi1) * sin(phi2)) tmp = 0.0 if (phi2 <= -1.7e+16) tmp = atan(t_0, Float64(sin(phi2) - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); elseif (phi2 <= 1.7e-48) tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(t_1 - Float64(cos(lambda2) * sin(phi1)))); else tmp = atan(t_0, Float64(t_1 - Float64(cos(lambda1) * phi1))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin(lambda1) * cos(phi2); t_1 = cos(phi1) * sin(phi2); tmp = 0.0; if (phi2 <= -1.7e+16) tmp = atan2(t_0, (sin(phi2) - (phi1 * cos((lambda2 - lambda1))))); elseif (phi2 <= 1.7e-48) tmp = atan2(sin((lambda1 - lambda2)), (t_1 - (cos(lambda2) * sin(phi1)))); else tmp = atan2(t_0, (t_1 - (cos(lambda1) * phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -1.7e+16], N[ArcTan[t$95$0 / N[(N[Sin[phi2], $MachinePrecision] - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], If[LessEqual[phi2, 1.7e-48], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(t$95$1 - N[(N[Cos[lambda2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[t$95$0 / N[(t$95$1 - N[(N[Cos[lambda1], $MachinePrecision] * phi1), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \lambda_1 \cdot \cos \phi_2\\
t_1 := \cos \phi_1 \cdot \sin \phi_2\\
\mathbf{if}\;\phi_2 \leq -1.7 \cdot 10^{+16}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{\sin \phi_2 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{elif}\;\phi_2 \leq 1.7 \cdot 10^{-48}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{t\_1 - \cos \lambda_2 \cdot \sin \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{t\_0}{t\_1 - \cos \lambda_1 \cdot \phi_1}\\
\end{array}
\end{array}
if phi2 < -1.7e16Initial program 86.6%
Taylor expanded in phi2 around 0 63.5%
sub-neg63.5%
remove-double-neg63.5%
mul-1-neg63.5%
distribute-neg-in63.5%
+-commutative63.5%
cos-neg63.5%
mul-1-neg63.5%
unsub-neg63.5%
Simplified63.5%
Taylor expanded in phi1 around 0 58.3%
Taylor expanded in lambda2 around 0 41.4%
Taylor expanded in phi1 around 0 41.4%
if -1.7e16 < phi2 < 1.70000000000000014e-48Initial program 79.2%
add-sqr-sqrt45.1%
sqrt-unprod46.2%
pow246.2%
Applied egg-rr46.2%
Taylor expanded in phi2 around 0 76.6%
Taylor expanded in lambda1 around 0 69.2%
cos-neg69.2%
Simplified69.2%
Taylor expanded in phi2 around 0 69.2%
if 1.70000000000000014e-48 < phi2 Initial program 79.9%
Taylor expanded in phi2 around 0 52.4%
sub-neg52.4%
remove-double-neg52.4%
mul-1-neg52.4%
distribute-neg-in52.4%
+-commutative52.4%
cos-neg52.4%
mul-1-neg52.4%
unsub-neg52.4%
Simplified52.4%
Taylor expanded in phi1 around 0 47.9%
Taylor expanded in lambda2 around 0 25.3%
Taylor expanded in lambda2 around 0 25.5%
cos-neg52.3%
Simplified25.5%
Final simplification50.2%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* phi1 (cos (- lambda2 lambda1)))))
(if (or (<= phi2 -1.5e+82) (not (<= phi2 1.3e-17)))
(atan2 (* (sin lambda1) (cos phi2)) (- (sin phi2) t_0))
(atan2 (sin (- lambda1 lambda2)) (- (* (cos phi1) (sin phi2)) t_0)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = phi1 * cos((lambda2 - lambda1));
double tmp;
if ((phi2 <= -1.5e+82) || !(phi2 <= 1.3e-17)) {
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - t_0));
} else {
tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - t_0));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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 = phi1 * cos((lambda2 - lambda1))
if ((phi2 <= (-1.5d+82)) .or. (.not. (phi2 <= 1.3d-17))) then
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - t_0))
else
tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - t_0))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = phi1 * Math.cos((lambda2 - lambda1));
double tmp;
if ((phi2 <= -1.5e+82) || !(phi2 <= 1.3e-17)) {
tmp = Math.atan2((Math.sin(lambda1) * Math.cos(phi2)), (Math.sin(phi2) - t_0));
} else {
tmp = Math.atan2(Math.sin((lambda1 - lambda2)), ((Math.cos(phi1) * Math.sin(phi2)) - t_0));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = phi1 * math.cos((lambda2 - lambda1)) tmp = 0 if (phi2 <= -1.5e+82) or not (phi2 <= 1.3e-17): tmp = math.atan2((math.sin(lambda1) * math.cos(phi2)), (math.sin(phi2) - t_0)) else: tmp = math.atan2(math.sin((lambda1 - lambda2)), ((math.cos(phi1) * math.sin(phi2)) - t_0)) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(phi1 * cos(Float64(lambda2 - lambda1))) tmp = 0.0 if ((phi2 <= -1.5e+82) || !(phi2 <= 1.3e-17)) tmp = atan(Float64(sin(lambda1) * cos(phi2)), Float64(sin(phi2) - t_0)); else tmp = atan(sin(Float64(lambda1 - lambda2)), Float64(Float64(cos(phi1) * sin(phi2)) - t_0)); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = phi1 * cos((lambda2 - lambda1)); tmp = 0.0; if ((phi2 <= -1.5e+82) || ~((phi2 <= 1.3e-17))) tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - t_0)); else tmp = atan2(sin((lambda1 - lambda2)), ((cos(phi1) * sin(phi2)) - t_0)); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[phi2, -1.5e+82], N[Not[LessEqual[phi2, 1.3e-17]], $MachinePrecision]], N[ArcTan[N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[Sin[phi2], $MachinePrecision] - t$95$0), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\\
\mathbf{if}\;\phi_2 \leq -1.5 \cdot 10^{+82} \lor \neg \left(\phi_2 \leq 1.3 \cdot 10^{-17}\right):\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1 \cdot \cos \phi_2}{\sin \phi_2 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - t\_0}\\
\end{array}
\end{array}
if phi2 < -1.49999999999999995e82 or 1.30000000000000002e-17 < phi2 Initial program 85.7%
Taylor expanded in phi2 around 0 57.3%
sub-neg57.3%
remove-double-neg57.3%
mul-1-neg57.3%
distribute-neg-in57.3%
+-commutative57.3%
cos-neg57.3%
mul-1-neg57.3%
unsub-neg57.3%
Simplified57.3%
Taylor expanded in phi1 around 0 52.2%
Taylor expanded in lambda2 around 0 33.6%
Taylor expanded in phi1 around 0 33.6%
if -1.49999999999999995e82 < phi2 < 1.30000000000000002e-17Initial program 77.1%
Taylor expanded in phi2 around 0 76.2%
sub-neg76.2%
remove-double-neg76.2%
mul-1-neg76.2%
distribute-neg-in76.2%
+-commutative76.2%
cos-neg76.2%
mul-1-neg76.2%
unsub-neg76.2%
Simplified76.2%
Taylor expanded in phi1 around 0 51.3%
add-cbrt-cube48.5%
pow348.5%
Applied egg-rr48.5%
Taylor expanded in phi2 around 0 46.5%
Final simplification40.6%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= lambda2 4.5e-73)
(atan2
(* (sin lambda1) (cos phi2))
(- (sin phi2) (* phi1 (cos (- lambda2 lambda1)))))
(atan2 (sin lambda1) (+ -1.0 (- 1.0 (* phi1 (cos (- lambda1 lambda2))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.5e-73) {
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))));
} else {
tmp = atan2(sin(lambda1), (-1.0 + (1.0 - (phi1 * cos((lambda1 - lambda2))))));
}
return tmp;
}
real(8) function code(lambda1, lambda2, phi1, phi2)
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.5d-73) then
tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1)))))
else
tmp = atan2(sin(lambda1), ((-1.0d0) + (1.0d0 - (phi1 * cos((lambda1 - lambda2))))))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 4.5e-73) {
tmp = Math.atan2((Math.sin(lambda1) * Math.cos(phi2)), (Math.sin(phi2) - (phi1 * Math.cos((lambda2 - lambda1)))));
} else {
tmp = Math.atan2(Math.sin(lambda1), (-1.0 + (1.0 - (phi1 * Math.cos((lambda1 - lambda2))))));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 4.5e-73: tmp = math.atan2((math.sin(lambda1) * math.cos(phi2)), (math.sin(phi2) - (phi1 * math.cos((lambda2 - lambda1))))) else: tmp = math.atan2(math.sin(lambda1), (-1.0 + (1.0 - (phi1 * math.cos((lambda1 - lambda2)))))) return tmp
function code(lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 4.5e-73) tmp = atan(Float64(sin(lambda1) * cos(phi2)), Float64(sin(phi2) - Float64(phi1 * cos(Float64(lambda2 - lambda1))))); else tmp = atan(sin(lambda1), Float64(-1.0 + Float64(1.0 - Float64(phi1 * cos(Float64(lambda1 - lambda2)))))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) tmp = 0.0; if (lambda2 <= 4.5e-73) tmp = atan2((sin(lambda1) * cos(phi2)), (sin(phi2) - (phi1 * cos((lambda2 - lambda1))))); else tmp = atan2(sin(lambda1), (-1.0 + (1.0 - (phi1 * cos((lambda1 - lambda2)))))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda2, 4.5e-73], N[ArcTan[N[(N[Sin[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[Sin[phi2], $MachinePrecision] - N[(phi1 * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcTan[N[Sin[lambda1], $MachinePrecision] / N[(-1.0 + N[(1.0 - N[(phi1 * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 4.5 \cdot 10^{-73}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1 \cdot \cos \phi_2}{\sin \phi_2 - \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\sin \lambda_1}{-1 + \left(1 - \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\\
\end{array}
\end{array}
if lambda2 < 4.5e-73Initial program 83.6%
Taylor expanded in phi2 around 0 70.2%
sub-neg70.2%
remove-double-neg70.2%
mul-1-neg70.2%
distribute-neg-in70.2%
+-commutative70.2%
cos-neg70.2%
mul-1-neg70.2%
unsub-neg70.2%
Simplified70.2%
Taylor expanded in phi1 around 0 55.2%
Taylor expanded in lambda2 around 0 39.5%
Taylor expanded in phi1 around 0 39.5%
if 4.5e-73 < lambda2 Initial program 74.6%
Taylor expanded in phi2 around 0 61.3%
sub-neg61.3%
remove-double-neg61.3%
mul-1-neg61.3%
distribute-neg-in61.3%
+-commutative61.3%
cos-neg61.3%
mul-1-neg61.3%
unsub-neg61.3%
Simplified61.3%
Taylor expanded in phi1 around 0 43.2%
Taylor expanded in lambda2 around 0 11.3%
Taylor expanded in phi2 around 0 12.4%
Taylor expanded in phi1 around 0 12.4%
Taylor expanded in phi2 around 0 13.4%
associate-*r*13.4%
neg-mul-113.4%
*-commutative13.4%
Simplified13.4%
expm1-log1p-u9.6%
expm1-undefine14.0%
cos-diff14.4%
*-commutative14.4%
*-commutative14.4%
cos-diff14.0%
Applied egg-rr14.0%
sub-neg14.0%
metadata-eval14.0%
+-commutative14.0%
log1p-undefine14.0%
rem-exp-log17.8%
distribute-rgt-neg-in17.8%
unsub-neg17.8%
*-commutative17.8%
Simplified17.8%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (sin lambda1) (sin phi2)))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2(sin(lambda1), sin(phi2));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = atan2(sin(lambda1), sin(phi2))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return Math.atan2(Math.sin(lambda1), Math.sin(phi2));
}
def code(lambda1, lambda2, phi1, phi2): return math.atan2(math.sin(lambda1), math.sin(phi2))
function code(lambda1, lambda2, phi1, phi2) return atan(sin(lambda1), sin(phi2)) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = atan2(sin(lambda1), sin(phi2)); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[Sin[lambda1], $MachinePrecision] / N[Sin[phi2], $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\tan^{-1}_* \frac{\sin \lambda_1}{\sin \phi_2}
\end{array}
Initial program 81.0%
Taylor expanded in phi2 around 0 67.6%
sub-neg67.6%
remove-double-neg67.6%
mul-1-neg67.6%
distribute-neg-in67.6%
+-commutative67.6%
cos-neg67.6%
mul-1-neg67.6%
unsub-neg67.6%
Simplified67.6%
Taylor expanded in phi1 around 0 51.7%
Taylor expanded in lambda2 around 0 31.2%
Taylor expanded in phi2 around 0 21.6%
Taylor expanded in phi1 around 0 21.6%
Taylor expanded in phi1 around 0 23.9%
herbie shell --seed 2024107
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))