
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(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 = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (Math.cos(phi1) + (Math.cos(phi2) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (math.cos(phi1) + (math.cos(phi2) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(cos(phi1) + Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 15 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(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 = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (Math.cos(phi1) + (Math.cos(phi2) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (math.cos(phi1) + (math.cos(phi2) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(cos(phi1) + Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (fma (cos phi2) (cos (- lambda1 lambda2)) (cos phi1)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), fma(cos(phi2), cos((lambda1 - lambda2)), cos(phi1)));
}
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), fma(cos(phi2), cos(Float64(lambda1 - lambda2)), cos(phi1)))) end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\mathsf{fma}\left(\cos \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)}
\end{array}
Initial program 99.5%
cos-neg99.5%
cos-neg99.5%
cos-neg99.5%
+-commutative99.5%
cos-neg99.5%
fma-define99.5%
Simplified99.5%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* (cos phi2) (sin (- lambda1 lambda2)))))
(if (<= phi2 21000000.0)
(+ lambda1 (atan2 t_1 (+ t_0 (cos phi1))))
(if (<= phi2 8.8e+201)
(+ lambda1 (atan2 t_1 (+ (cos phi1) (* (cos phi2) (cos lambda1)))))
(+ lambda1 (atan2 t_1 (+ (* (cos phi2) t_0) 1.0)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi2) * sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1)));
} else if (phi2 <= 8.8e+201) {
tmp = lambda1 + atan2(t_1, (cos(phi1) + (cos(phi2) * cos(lambda1))));
} else {
tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 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((lambda1 - lambda2))
t_1 = cos(phi2) * sin((lambda1 - lambda2))
if (phi2 <= 21000000.0d0) then
tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1)))
else if (phi2 <= 8.8d+201) then
tmp = lambda1 + atan2(t_1, (cos(phi1) + (cos(phi2) * cos(lambda1))))
else
tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 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((lambda1 - lambda2));
double t_1 = Math.cos(phi2) * Math.sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + Math.atan2(t_1, (t_0 + Math.cos(phi1)));
} else if (phi2 <= 8.8e+201) {
tmp = lambda1 + Math.atan2(t_1, (Math.cos(phi1) + (Math.cos(phi2) * Math.cos(lambda1))));
} else {
tmp = lambda1 + Math.atan2(t_1, ((Math.cos(phi2) * t_0) + 1.0));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 - lambda2)) t_1 = math.cos(phi2) * math.sin((lambda1 - lambda2)) tmp = 0 if phi2 <= 21000000.0: tmp = lambda1 + math.atan2(t_1, (t_0 + math.cos(phi1))) elif phi2 <= 8.8e+201: tmp = lambda1 + math.atan2(t_1, (math.cos(phi1) + (math.cos(phi2) * math.cos(lambda1)))) else: tmp = lambda1 + math.atan2(t_1, ((math.cos(phi2) * t_0) + 1.0)) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) tmp = 0.0 if (phi2 <= 21000000.0) tmp = Float64(lambda1 + atan(t_1, Float64(t_0 + cos(phi1)))); elseif (phi2 <= 8.8e+201) tmp = Float64(lambda1 + atan(t_1, Float64(cos(phi1) + Float64(cos(phi2) * cos(lambda1))))); else tmp = Float64(lambda1 + atan(t_1, Float64(Float64(cos(phi2) * t_0) + 1.0))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos((lambda1 - lambda2)); t_1 = cos(phi2) * sin((lambda1 - lambda2)); tmp = 0.0; if (phi2 <= 21000000.0) tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1))); elseif (phi2 <= 8.8e+201) tmp = lambda1 + atan2(t_1, (cos(phi1) + (cos(phi2) * cos(lambda1)))); else tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 1.0)); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, 21000000.0], N[(lambda1 + N[ArcTan[t$95$1 / N[(t$95$0 + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 8.8e+201], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq 21000000:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{t\_0 + \cos \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 8.8 \cdot 10^{+201}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_1 + \cos \phi_2 \cdot \cos \lambda_1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_2 \cdot t\_0 + 1}\\
\end{array}
\end{array}
if phi2 < 2.1e7Initial program 99.5%
Taylor expanded in phi2 around 0 84.6%
if 2.1e7 < phi2 < 8.8e201Initial program 99.3%
Taylor expanded in lambda2 around 0 90.9%
+-commutative90.9%
*-commutative90.9%
Simplified90.9%
if 8.8e201 < phi2 Initial program 99.7%
Taylor expanded in phi1 around 0 98.0%
Final simplification86.5%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(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 = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (Math.cos(phi1) + (Math.cos(phi2) * Math.cos((lambda1 - lambda2)))));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (math.cos(phi1) + (math.cos(phi2) * math.cos((lambda1 - lambda2)))))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(cos(phi1) + Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2))))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\end{array}
Initial program 99.5%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos lambda2))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos(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 = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos(lambda2))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (Math.cos(phi1) + (Math.cos(phi2) * Math.cos(lambda2))));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (math.cos(phi1) + (math.cos(phi2) * math.cos(lambda2))))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(cos(phi1) + Float64(cos(phi2) * cos(lambda2))))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + (cos(phi2) * cos(lambda2)))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \lambda_2}
\end{array}
Initial program 99.5%
Taylor expanded in lambda1 around 0 97.8%
+-commutative97.8%
cos-neg97.8%
Simplified97.8%
Final simplification97.8%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* (cos phi2) (sin (- lambda1 lambda2)))))
(if (<= phi2 21000000.0)
(+ lambda1 (atan2 t_1 (+ t_0 (cos phi1))))
(if (<= phi2 3.4e+201)
(+ lambda1 (atan2 t_1 (+ (cos phi2) (cos phi1))))
(+ lambda1 (atan2 t_1 (+ (* (cos phi2) t_0) 1.0)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi2) * sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1)));
} else if (phi2 <= 3.4e+201) {
tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1)));
} else {
tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 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((lambda1 - lambda2))
t_1 = cos(phi2) * sin((lambda1 - lambda2))
if (phi2 <= 21000000.0d0) then
tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1)))
else if (phi2 <= 3.4d+201) then
tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1)))
else
tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 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((lambda1 - lambda2));
double t_1 = Math.cos(phi2) * Math.sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + Math.atan2(t_1, (t_0 + Math.cos(phi1)));
} else if (phi2 <= 3.4e+201) {
tmp = lambda1 + Math.atan2(t_1, (Math.cos(phi2) + Math.cos(phi1)));
} else {
tmp = lambda1 + Math.atan2(t_1, ((Math.cos(phi2) * t_0) + 1.0));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 - lambda2)) t_1 = math.cos(phi2) * math.sin((lambda1 - lambda2)) tmp = 0 if phi2 <= 21000000.0: tmp = lambda1 + math.atan2(t_1, (t_0 + math.cos(phi1))) elif phi2 <= 3.4e+201: tmp = lambda1 + math.atan2(t_1, (math.cos(phi2) + math.cos(phi1))) else: tmp = lambda1 + math.atan2(t_1, ((math.cos(phi2) * t_0) + 1.0)) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) tmp = 0.0 if (phi2 <= 21000000.0) tmp = Float64(lambda1 + atan(t_1, Float64(t_0 + cos(phi1)))); elseif (phi2 <= 3.4e+201) tmp = Float64(lambda1 + atan(t_1, Float64(cos(phi2) + cos(phi1)))); else tmp = Float64(lambda1 + atan(t_1, Float64(Float64(cos(phi2) * t_0) + 1.0))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos((lambda1 - lambda2)); t_1 = cos(phi2) * sin((lambda1 - lambda2)); tmp = 0.0; if (phi2 <= 21000000.0) tmp = lambda1 + atan2(t_1, (t_0 + cos(phi1))); elseif (phi2 <= 3.4e+201) tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1))); else tmp = lambda1 + atan2(t_1, ((cos(phi2) * t_0) + 1.0)); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, 21000000.0], N[(lambda1 + N[ArcTan[t$95$1 / N[(t$95$0 + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 3.4e+201], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[Cos[phi2], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq 21000000:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{t\_0 + \cos \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 3.4 \cdot 10^{+201}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_2 + \cos \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_2 \cdot t\_0 + 1}\\
\end{array}
\end{array}
if phi2 < 2.1e7Initial program 99.5%
Taylor expanded in phi2 around 0 84.6%
if 2.1e7 < phi2 < 3.4e201Initial program 99.3%
expm1-log1p-u99.1%
expm1-undefine99.2%
Applied egg-rr99.2%
expm1-define99.1%
Simplified99.1%
Taylor expanded in lambda1 around 0 95.4%
cos-neg95.4%
Simplified95.4%
Taylor expanded in lambda2 around 0 87.1%
+-commutative87.1%
Simplified87.1%
if 3.4e201 < phi2 Initial program 99.7%
Taylor expanded in phi1 around 0 98.0%
Final simplification85.9%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi2) (sin (- lambda1 lambda2)))))
(if (<= phi2 21000000.0)
(+ lambda1 (atan2 t_0 (+ (cos (- lambda1 lambda2)) (cos phi1))))
(if (<= phi2 1.95e+201)
(+ lambda1 (atan2 t_0 (+ (cos phi2) (cos phi1))))
(+ lambda1 (atan2 t_0 (+ (* (cos phi2) (cos lambda2)) 1.0)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi2) * sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1)));
} else if (phi2 <= 1.95e+201) {
tmp = lambda1 + atan2(t_0, (cos(phi2) + cos(phi1)));
} else {
tmp = lambda1 + atan2(t_0, ((cos(phi2) * cos(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) :: tmp
t_0 = cos(phi2) * sin((lambda1 - lambda2))
if (phi2 <= 21000000.0d0) then
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1)))
else if (phi2 <= 1.95d+201) then
tmp = lambda1 + atan2(t_0, (cos(phi2) + cos(phi1)))
else
tmp = lambda1 + atan2(t_0, ((cos(phi2) * cos(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(phi2) * Math.sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 21000000.0) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos((lambda1 - lambda2)) + Math.cos(phi1)));
} else if (phi2 <= 1.95e+201) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos(phi2) + Math.cos(phi1)));
} else {
tmp = lambda1 + Math.atan2(t_0, ((Math.cos(phi2) * Math.cos(lambda2)) + 1.0));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos(phi2) * math.sin((lambda1 - lambda2)) tmp = 0 if phi2 <= 21000000.0: tmp = lambda1 + math.atan2(t_0, (math.cos((lambda1 - lambda2)) + math.cos(phi1))) elif phi2 <= 1.95e+201: tmp = lambda1 + math.atan2(t_0, (math.cos(phi2) + math.cos(phi1))) else: tmp = lambda1 + math.atan2(t_0, ((math.cos(phi2) * math.cos(lambda2)) + 1.0)) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))) tmp = 0.0 if (phi2 <= 21000000.0) tmp = Float64(lambda1 + atan(t_0, Float64(cos(Float64(lambda1 - lambda2)) + cos(phi1)))); elseif (phi2 <= 1.95e+201) tmp = Float64(lambda1 + atan(t_0, Float64(cos(phi2) + cos(phi1)))); else tmp = Float64(lambda1 + atan(t_0, Float64(Float64(cos(phi2) * cos(lambda2)) + 1.0))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = cos(phi2) * sin((lambda1 - lambda2)); tmp = 0.0; if (phi2 <= 21000000.0) tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1))); elseif (phi2 <= 1.95e+201) tmp = lambda1 + atan2(t_0, (cos(phi2) + cos(phi1))); else tmp = lambda1 + atan2(t_0, ((cos(phi2) * cos(lambda2)) + 1.0)); 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]}, If[LessEqual[phi2, 21000000.0], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.95e+201], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[phi2], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq 21000000:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1}\\
\mathbf{elif}\;\phi_2 \leq 1.95 \cdot 10^{+201}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \phi_2 + \cos \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \phi_2 \cdot \cos \lambda_2 + 1}\\
\end{array}
\end{array}
if phi2 < 2.1e7Initial program 99.5%
Taylor expanded in phi2 around 0 84.6%
if 2.1e7 < phi2 < 1.95e201Initial program 99.3%
expm1-log1p-u99.1%
expm1-undefine99.2%
Applied egg-rr99.2%
expm1-define99.1%
Simplified99.1%
Taylor expanded in lambda1 around 0 95.4%
cos-neg95.4%
Simplified95.4%
Taylor expanded in lambda2 around 0 87.1%
+-commutative87.1%
Simplified87.1%
if 1.95e201 < phi2 Initial program 99.7%
expm1-log1p-u99.7%
expm1-undefine99.8%
Applied egg-rr99.8%
expm1-define99.7%
Simplified99.7%
Taylor expanded in lambda1 around 0 97.6%
cos-neg97.6%
Simplified97.6%
Taylor expanded in phi1 around 0 97.7%
*-commutative97.7%
Simplified97.7%
Final simplification85.9%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (sin (- lambda1 lambda2))) (t_1 (* (cos phi2) t_0)))
(if (<= phi2 11.5)
(+
lambda1
(atan2 t_0 (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))
(if (<= phi2 5.3e+201)
(+ lambda1 (atan2 t_1 (+ (cos phi2) (cos phi1))))
(+ lambda1 (atan2 t_1 (+ (* (cos phi2) (cos lambda2)) 1.0)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin((lambda1 - lambda2));
double t_1 = cos(phi2) * t_0;
double tmp;
if (phi2 <= 11.5) {
tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))));
} else if (phi2 <= 5.3e+201) {
tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1)));
} else {
tmp = lambda1 + atan2(t_1, ((cos(phi2) * cos(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 = sin((lambda1 - lambda2))
t_1 = cos(phi2) * t_0
if (phi2 <= 11.5d0) then
tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))))
else if (phi2 <= 5.3d+201) then
tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1)))
else
tmp = lambda1 + atan2(t_1, ((cos(phi2) * cos(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.sin((lambda1 - lambda2));
double t_1 = Math.cos(phi2) * t_0;
double tmp;
if (phi2 <= 11.5) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos(phi1) + (Math.cos(phi2) * Math.cos((lambda1 - lambda2)))));
} else if (phi2 <= 5.3e+201) {
tmp = lambda1 + Math.atan2(t_1, (Math.cos(phi2) + Math.cos(phi1)));
} else {
tmp = lambda1 + Math.atan2(t_1, ((Math.cos(phi2) * Math.cos(lambda2)) + 1.0));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin((lambda1 - lambda2)) t_1 = math.cos(phi2) * t_0 tmp = 0 if phi2 <= 11.5: tmp = lambda1 + math.atan2(t_0, (math.cos(phi1) + (math.cos(phi2) * math.cos((lambda1 - lambda2))))) elif phi2 <= 5.3e+201: tmp = lambda1 + math.atan2(t_1, (math.cos(phi2) + math.cos(phi1))) else: tmp = lambda1 + math.atan2(t_1, ((math.cos(phi2) * math.cos(lambda2)) + 1.0)) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = sin(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi2) * t_0) tmp = 0.0 if (phi2 <= 11.5) tmp = Float64(lambda1 + atan(t_0, Float64(cos(phi1) + Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))); elseif (phi2 <= 5.3e+201) tmp = Float64(lambda1 + atan(t_1, Float64(cos(phi2) + cos(phi1)))); else tmp = Float64(lambda1 + atan(t_1, Float64(Float64(cos(phi2) * cos(lambda2)) + 1.0))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin((lambda1 - lambda2)); t_1 = cos(phi2) * t_0; tmp = 0.0; if (phi2 <= 11.5) tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2))))); elseif (phi2 <= 5.3e+201) tmp = lambda1 + atan2(t_1, (cos(phi2) + cos(phi1))); else tmp = lambda1 + atan2(t_1, ((cos(phi2) * cos(lambda2)) + 1.0)); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]}, If[LessEqual[phi2, 11.5], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 5.3e+201], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[Cos[phi2], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[t$95$1 / N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_2 \cdot t\_0\\
\mathbf{if}\;\phi_2 \leq 11.5:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{elif}\;\phi_2 \leq 5.3 \cdot 10^{+201}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_2 + \cos \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_1}{\cos \phi_2 \cdot \cos \lambda_2 + 1}\\
\end{array}
\end{array}
if phi2 < 11.5Initial program 99.5%
Taylor expanded in phi2 around 0 84.6%
if 11.5 < phi2 < 5.30000000000000035e201Initial program 99.2%
expm1-log1p-u99.1%
expm1-undefine99.1%
Applied egg-rr99.1%
expm1-define99.1%
Simplified99.1%
Taylor expanded in lambda1 around 0 95.5%
cos-neg95.5%
Simplified95.5%
Taylor expanded in lambda2 around 0 83.9%
+-commutative83.9%
Simplified83.9%
if 5.30000000000000035e201 < phi2 Initial program 99.7%
expm1-log1p-u99.7%
expm1-undefine99.8%
Applied egg-rr99.8%
expm1-define99.7%
Simplified99.7%
Taylor expanded in lambda1 around 0 97.6%
cos-neg97.6%
Simplified97.6%
Taylor expanded in phi1 around 0 97.7%
*-commutative97.7%
Simplified97.7%
Final simplification85.4%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (sin (- lambda1 lambda2))))
(if (<= phi2 11.5)
(+
lambda1
(atan2 t_0 (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))
(+ lambda1 (atan2 (* (cos phi2) t_0) (+ (cos phi2) (cos phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 11.5) {
tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))));
} else {
tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(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) :: tmp
t_0 = sin((lambda1 - lambda2))
if (phi2 <= 11.5d0) then
tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2)))))
else
tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(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 - lambda2));
double tmp;
if (phi2 <= 11.5) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos(phi1) + (Math.cos(phi2) * Math.cos((lambda1 - lambda2)))));
} else {
tmp = lambda1 + Math.atan2((Math.cos(phi2) * t_0), (Math.cos(phi2) + Math.cos(phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin((lambda1 - lambda2)) tmp = 0 if phi2 <= 11.5: tmp = lambda1 + math.atan2(t_0, (math.cos(phi1) + (math.cos(phi2) * math.cos((lambda1 - lambda2))))) else: tmp = lambda1 + math.atan2((math.cos(phi2) * t_0), (math.cos(phi2) + math.cos(phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= 11.5) tmp = Float64(lambda1 + atan(t_0, Float64(cos(phi1) + Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))); else tmp = Float64(lambda1 + atan(Float64(cos(phi2) * t_0), Float64(cos(phi2) + cos(phi1)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin((lambda1 - lambda2)); tmp = 0.0; if (phi2 <= 11.5) tmp = lambda1 + atan2(t_0, (cos(phi1) + (cos(phi2) * cos((lambda1 - lambda2))))); else tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, 11.5], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[phi1], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] / N[(N[Cos[phi2], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq 11.5:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot t\_0}{\cos \phi_2 + \cos \phi_1}\\
\end{array}
\end{array}
if phi2 < 11.5Initial program 99.5%
Taylor expanded in phi2 around 0 84.6%
if 11.5 < phi2 Initial program 99.4%
expm1-log1p-u99.3%
expm1-undefine99.4%
Applied egg-rr99.4%
expm1-define99.3%
Simplified99.3%
Taylor expanded in lambda1 around 0 96.2%
cos-neg96.2%
Simplified96.2%
Taylor expanded in lambda2 around 0 84.3%
+-commutative84.3%
Simplified84.3%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (sin (- lambda1 lambda2))))
(if (<= phi2 1.15e-11)
(+ lambda1 (atan2 t_0 (+ (cos (- lambda1 lambda2)) (cos phi1))))
(+ lambda1 (atan2 (* (cos phi2) t_0) (+ (cos phi2) (cos phi1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin((lambda1 - lambda2));
double tmp;
if (phi2 <= 1.15e-11) {
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1)));
} else {
tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(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) :: tmp
t_0 = sin((lambda1 - lambda2))
if (phi2 <= 1.15d-11) then
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1)))
else
tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(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 - lambda2));
double tmp;
if (phi2 <= 1.15e-11) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos((lambda1 - lambda2)) + Math.cos(phi1)));
} else {
tmp = lambda1 + Math.atan2((Math.cos(phi2) * t_0), (Math.cos(phi2) + Math.cos(phi1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin((lambda1 - lambda2)) tmp = 0 if phi2 <= 1.15e-11: tmp = lambda1 + math.atan2(t_0, (math.cos((lambda1 - lambda2)) + math.cos(phi1))) else: tmp = lambda1 + math.atan2((math.cos(phi2) * t_0), (math.cos(phi2) + math.cos(phi1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi2 <= 1.15e-11) tmp = Float64(lambda1 + atan(t_0, Float64(cos(Float64(lambda1 - lambda2)) + cos(phi1)))); else tmp = Float64(lambda1 + atan(Float64(cos(phi2) * t_0), Float64(cos(phi2) + cos(phi1)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin((lambda1 - lambda2)); tmp = 0.0; if (phi2 <= 1.15e-11) tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + cos(phi1))); else tmp = lambda1 + atan2((cos(phi2) * t_0), (cos(phi2) + cos(phi1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, 1.15e-11], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] / N[(N[Cos[phi2], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_2 \leq 1.15 \cdot 10^{-11}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot t\_0}{\cos \phi_2 + \cos \phi_1}\\
\end{array}
\end{array}
if phi2 < 1.15000000000000007e-11Initial program 99.5%
Taylor expanded in phi2 around 0 84.5%
Taylor expanded in phi2 around 0 84.0%
if 1.15000000000000007e-11 < phi2 Initial program 99.4%
expm1-log1p-u99.3%
expm1-undefine99.4%
Applied egg-rr99.4%
expm1-define99.3%
Simplified99.3%
Taylor expanded in lambda1 around 0 96.3%
cos-neg96.3%
Simplified96.3%
Taylor expanded in lambda2 around 0 84.8%
+-commutative84.8%
Simplified84.8%
Final simplification84.2%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (cos lambda2)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + cos(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 = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + cos(lambda2)))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2((Math.cos(phi2) * Math.sin((lambda1 - lambda2))), (Math.cos(phi1) + Math.cos(lambda2)));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2((math.cos(phi2) * math.sin((lambda1 - lambda2))), (math.cos(phi1) + math.cos(lambda2)))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(Float64(cos(phi2) * sin(Float64(lambda1 - lambda2))), Float64(cos(phi1) + cos(lambda2)))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2((cos(phi2) * sin((lambda1 - lambda2))), (cos(phi1) + cos(lambda2))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[(N[Cos[phi2], $MachinePrecision] * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \lambda_2}
\end{array}
Initial program 99.5%
expm1-log1p-u99.4%
expm1-undefine99.4%
Applied egg-rr99.4%
expm1-define99.4%
Simplified99.4%
Taylor expanded in lambda1 around 0 97.8%
cos-neg97.8%
Simplified97.8%
Taylor expanded in phi2 around 0 79.1%
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (sin (- lambda1 lambda2))))
(if (<= phi1 35000000000.0)
(+ lambda1 (atan2 t_0 (+ (cos (- lambda1 lambda2)) 1.0)))
(+ lambda1 (atan2 t_0 (+ (cos phi1) (cos lambda1)))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin((lambda1 - lambda2));
double tmp;
if (phi1 <= 35000000000.0) {
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + 1.0));
} else {
tmp = lambda1 + atan2(t_0, (cos(phi1) + 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) :: tmp
t_0 = sin((lambda1 - lambda2))
if (phi1 <= 35000000000.0d0) then
tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + 1.0d0))
else
tmp = lambda1 + atan2(t_0, (cos(phi1) + cos(lambda1)))
end if
code = tmp
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.sin((lambda1 - lambda2));
double tmp;
if (phi1 <= 35000000000.0) {
tmp = lambda1 + Math.atan2(t_0, (Math.cos((lambda1 - lambda2)) + 1.0));
} else {
tmp = lambda1 + Math.atan2(t_0, (Math.cos(phi1) + Math.cos(lambda1)));
}
return tmp;
}
def code(lambda1, lambda2, phi1, phi2): t_0 = math.sin((lambda1 - lambda2)) tmp = 0 if phi1 <= 35000000000.0: tmp = lambda1 + math.atan2(t_0, (math.cos((lambda1 - lambda2)) + 1.0)) else: tmp = lambda1 + math.atan2(t_0, (math.cos(phi1) + math.cos(lambda1))) return tmp
function code(lambda1, lambda2, phi1, phi2) t_0 = sin(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= 35000000000.0) tmp = Float64(lambda1 + atan(t_0, Float64(cos(Float64(lambda1 - lambda2)) + 1.0))); else tmp = Float64(lambda1 + atan(t_0, Float64(cos(phi1) + cos(lambda1)))); end return tmp end
function tmp_2 = code(lambda1, lambda2, phi1, phi2) t_0 = sin((lambda1 - lambda2)); tmp = 0.0; if (phi1 <= 35000000000.0) tmp = lambda1 + atan2(t_0, (cos((lambda1 - lambda2)) + 1.0)); else tmp = lambda1 + atan2(t_0, (cos(phi1) + cos(lambda1))); end tmp_2 = tmp; end
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, 35000000000.0], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(lambda1 + N[ArcTan[t$95$0 / N[(N[Cos[phi1], $MachinePrecision] + N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\phi_1 \leq 35000000000:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \left(\lambda_1 - \lambda_2\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\lambda_1 + \tan^{-1}_* \frac{t\_0}{\cos \phi_1 + \cos \lambda_1}\\
\end{array}
\end{array}
if phi1 < 3.5e10Initial program 99.7%
Taylor expanded in phi2 around 0 79.3%
add-sqr-sqrt66.5%
pow266.5%
+-commutative66.5%
fma-undefine66.5%
Applied egg-rr66.5%
Taylor expanded in phi2 around 0 78.3%
+-commutative78.3%
Simplified78.3%
Taylor expanded in phi1 around 0 70.2%
+-commutative70.2%
Simplified70.2%
if 3.5e10 < phi1 Initial program 98.9%
Taylor expanded in phi2 around 0 78.7%
add-sqr-sqrt45.4%
pow245.4%
+-commutative45.4%
fma-undefine45.4%
Applied egg-rr45.4%
Taylor expanded in phi2 around 0 78.8%
+-commutative78.8%
Simplified78.8%
Taylor expanded in lambda2 around 0 67.3%
Final simplification69.4%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (sin (- lambda1 lambda2)) (+ (cos (- lambda1 lambda2)) (cos phi1)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + cos(phi1)));
}
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 = lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + cos(phi1)))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2(Math.sin((lambda1 - lambda2)), (Math.cos((lambda1 - lambda2)) + Math.cos(phi1)));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2(math.sin((lambda1 - lambda2)), (math.cos((lambda1 - lambda2)) + math.cos(phi1)))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(sin(Float64(lambda1 - lambda2)), Float64(cos(Float64(lambda1 - lambda2)) + cos(phi1)))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + cos(phi1))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1}
\end{array}
Initial program 99.5%
Taylor expanded in phi2 around 0 79.1%
Taylor expanded in phi2 around 0 78.4%
Final simplification78.4%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (sin (- lambda1 lambda2)) (+ (cos phi1) (cos lambda2)))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2(sin((lambda1 - lambda2)), (cos(phi1) + cos(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 = lambda1 + atan2(sin((lambda1 - lambda2)), (cos(phi1) + cos(lambda2)))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2(Math.sin((lambda1 - lambda2)), (Math.cos(phi1) + Math.cos(lambda2)));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2(math.sin((lambda1 - lambda2)), (math.cos(phi1) + math.cos(lambda2)))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(sin(Float64(lambda1 - lambda2)), Float64(cos(phi1) + cos(lambda2)))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2(sin((lambda1 - lambda2)), (cos(phi1) + cos(lambda2))); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[Cos[phi1], $MachinePrecision] + N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \lambda_2}
\end{array}
Initial program 99.5%
Taylor expanded in phi2 around 0 79.1%
add-sqr-sqrt60.7%
pow260.7%
+-commutative60.7%
fma-undefine60.7%
Applied egg-rr60.7%
Taylor expanded in phi2 around 0 78.4%
+-commutative78.4%
Simplified78.4%
Taylor expanded in lambda1 around 0 77.7%
cos-neg77.7%
Simplified77.7%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (+ lambda1 (atan2 (sin (- lambda1 lambda2)) (+ (cos (- lambda1 lambda2)) 1.0))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + 1.0));
}
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 = lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + 1.0d0))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 + Math.atan2(Math.sin((lambda1 - lambda2)), (Math.cos((lambda1 - lambda2)) + 1.0));
}
def code(lambda1, lambda2, phi1, phi2): return lambda1 + math.atan2(math.sin((lambda1 - lambda2)), (math.cos((lambda1 - lambda2)) + 1.0))
function code(lambda1, lambda2, phi1, phi2) return Float64(lambda1 + atan(sin(Float64(lambda1 - lambda2)), Float64(cos(Float64(lambda1 - lambda2)) + 1.0))) end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1 + atan2(sin((lambda1 - lambda2)), (cos((lambda1 - lambda2)) + 1.0)); end
code[lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 + N[ArcTan[N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] / N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 + \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right)}{\cos \left(\lambda_1 - \lambda_2\right) + 1}
\end{array}
Initial program 99.5%
Taylor expanded in phi2 around 0 79.1%
add-sqr-sqrt60.7%
pow260.7%
+-commutative60.7%
fma-undefine60.7%
Applied egg-rr60.7%
Taylor expanded in phi2 around 0 78.4%
+-commutative78.4%
Simplified78.4%
Taylor expanded in phi1 around 0 66.2%
+-commutative66.2%
Simplified66.2%
(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 lambda1)
double code(double lambda1, double lambda2, double phi1, double phi2) {
return 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 = lambda1
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
return lambda1;
}
def code(lambda1, lambda2, phi1, phi2): return lambda1
function code(lambda1, lambda2, phi1, phi2) return lambda1 end
function tmp = code(lambda1, lambda2, phi1, phi2) tmp = lambda1; end
code[lambda1_, lambda2_, phi1_, phi2_] := lambda1
\begin{array}{l}
\\
\lambda_1
\end{array}
Initial program 99.5%
log1p-expm1-u99.5%
Applied egg-rr99.5%
Taylor expanded in lambda1 around inf 52.2%
herbie shell --seed 2024148
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))