| Alternative 1 | |
|---|---|
| Accuracy | 18.9% |
| Cost | 73165 |

(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
NOTE: lambda2 should be positive before calling this function
NOTE: phi1 should be positive before calling this function
NOTE: phi2 should be positive before calling this function
NOTE: lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* t_0 phi2))
(t_2
(-
(log (+ (expm1 (* (cos phi1) (sin phi2))) 1.0))
(* t_0 (* (sin phi1) (cos phi2))))))
(if (or (<= (- lambda1 lambda2) -2e-66)
(and (not (<= (- lambda1 lambda2) -4e-168))
(<= (- lambda1 lambda2) -5e-225)))
(atan2
(/
(-
(- (- (sin (- lambda1 lambda2))) t_1)
(sin (- lambda1 (+ lambda2 phi2))))
-2.0)
t_2)
(atan2 (/ t_1 -2.0) t_2))))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)))));
}
lambda2 = abs(lambda2);
phi1 = abs(phi1);
phi2 = abs(phi2);
assert(lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = t_0 * phi2;
double t_2 = log((expm1((cos(phi1) * sin(phi2))) + 1.0)) - (t_0 * (sin(phi1) * cos(phi2)));
double tmp;
if (((lambda1 - lambda2) <= -2e-66) || (!((lambda1 - lambda2) <= -4e-168) && ((lambda1 - lambda2) <= -5e-225))) {
tmp = atan2((((-sin((lambda1 - lambda2)) - t_1) - sin((lambda1 - (lambda2 + phi2)))) / -2.0), t_2);
} else {
tmp = atan2((t_1 / -2.0), t_2);
}
return tmp;
}
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)))));
}
lambda2 = Math.abs(lambda2);
phi1 = Math.abs(phi1);
phi2 = Math.abs(phi2);
assert lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((lambda1 - lambda2));
double t_1 = t_0 * phi2;
double t_2 = Math.log((Math.expm1((Math.cos(phi1) * Math.sin(phi2))) + 1.0)) - (t_0 * (Math.sin(phi1) * Math.cos(phi2)));
double tmp;
if (((lambda1 - lambda2) <= -2e-66) || (!((lambda1 - lambda2) <= -4e-168) && ((lambda1 - lambda2) <= -5e-225))) {
tmp = Math.atan2((((-Math.sin((lambda1 - lambda2)) - t_1) - Math.sin((lambda1 - (lambda2 + phi2)))) / -2.0), t_2);
} else {
tmp = Math.atan2((t_1 / -2.0), t_2);
}
return tmp;
}
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)))))
lambda2 = abs(lambda2) phi1 = abs(phi1) phi2 = abs(phi2) [lambda1, lambda2, phi1, phi2] = sort([lambda1, lambda2, phi1, phi2]) def code(lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda1 - lambda2)) t_1 = t_0 * phi2 t_2 = math.log((math.expm1((math.cos(phi1) * math.sin(phi2))) + 1.0)) - (t_0 * (math.sin(phi1) * math.cos(phi2))) tmp = 0 if ((lambda1 - lambda2) <= -2e-66) or (not ((lambda1 - lambda2) <= -4e-168) and ((lambda1 - lambda2) <= -5e-225)): tmp = math.atan2((((-math.sin((lambda1 - lambda2)) - t_1) - math.sin((lambda1 - (lambda2 + phi2)))) / -2.0), t_2) else: tmp = math.atan2((t_1 / -2.0), t_2) return tmp
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
lambda2 = abs(lambda2) phi1 = abs(phi1) phi2 = abs(phi2) lambda1, lambda2, phi1, phi2 = sort([lambda1, lambda2, phi1, phi2]) function code(lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(t_0 * phi2) t_2 = Float64(log(Float64(expm1(Float64(cos(phi1) * sin(phi2))) + 1.0)) - Float64(t_0 * Float64(sin(phi1) * cos(phi2)))) tmp = 0.0 if ((Float64(lambda1 - lambda2) <= -2e-66) || (!(Float64(lambda1 - lambda2) <= -4e-168) && (Float64(lambda1 - lambda2) <= -5e-225))) tmp = atan(Float64(Float64(Float64(Float64(-sin(Float64(lambda1 - lambda2))) - t_1) - sin(Float64(lambda1 - Float64(lambda2 + phi2)))) / -2.0), t_2); else tmp = atan(Float64(t_1 / -2.0), t_2); end return tmp 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]
NOTE: lambda2 should be positive before calling this function
NOTE: phi1 should be positive before calling this function
NOTE: phi2 should be positive before calling this function
NOTE: lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * phi2), $MachinePrecision]}, Block[{t$95$2 = N[(N[Log[N[(N[(Exp[N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]] - 1), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] - N[(t$95$0 * N[(N[Sin[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -2e-66], And[N[Not[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -4e-168]], $MachinePrecision], LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -5e-225]]], N[ArcTan[N[(N[(N[((-N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]) - t$95$1), $MachinePrecision] - N[Sin[N[(lambda1 - N[(lambda2 + phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / -2.0), $MachinePrecision] / t$95$2], $MachinePrecision], N[ArcTan[N[(t$95$1 / -2.0), $MachinePrecision] / t$95$2], $MachinePrecision]]]]]
\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)}
\begin{array}{l}
lambda2 = |lambda2|\\
phi1 = |phi1|\\
phi2 = |phi2|\\
[lambda1, lambda2, phi1, phi2] = \mathsf{sort}([lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := t_0 \cdot \phi_2\\
t_2 := \log \left(\mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right) + 1\right) - t_0 \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -2 \cdot 10^{-66} \lor \neg \left(\lambda_1 - \lambda_2 \leq -4 \cdot 10^{-168}\right) \land \lambda_1 - \lambda_2 \leq -5 \cdot 10^{-225}:\\
\;\;\;\;\tan^{-1}_* \frac{\frac{\left(\left(-\sin \left(\lambda_1 - \lambda_2\right)\right) - t_1\right) - \sin \left(\lambda_1 - \left(\lambda_2 + \phi_2\right)\right)}{-2}}{t_2}\\
\mathbf{else}:\\
\;\;\;\;\tan^{-1}_* \frac{\frac{t_1}{-2}}{t_2}\\
\end{array}
\end{array}
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
if (-.f64 lambda1 lambda2) < -2e-66 or -4.0000000000000002e-168 < (-.f64 lambda1 lambda2) < -5.0000000000000001e-225Initial program 73.7%
Applied egg-rr73.1%
[Start]73.7% | \[ \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)}
\] |
|---|---|
log1p-expm1-u [=>]73.8% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right)} - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
log1p-udef [=>]73.1% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\color{blue}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right)} - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Applied egg-rr46.2%
[Start]73.1% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
|---|---|
sin-cos-mult [=>]46.2% | \[ \tan^{-1}_* \frac{\color{blue}{\frac{\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)}{2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
frac-2neg [=>]46.2% | \[ \tan^{-1}_* \frac{\color{blue}{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{-2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
metadata-eval [=>]46.2% | \[ \tan^{-1}_* \frac{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{\color{blue}{-2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Simplified46.1%
[Start]46.2% | \[ \tan^{-1}_* \frac{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
|---|---|
neg-sub0 [=>]46.1% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{0 - \left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
+-commutative [=>]46.1% | \[ \tan^{-1}_* \frac{\frac{0 - \color{blue}{\left(\sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
associate--r+ [=>]46.1% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{\left(0 - \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right) - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
neg-sub0 [<=]46.1% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{\left(-\sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)} - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
+-commutative [=>]46.1% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \color{blue}{\left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)}\right) - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
associate--l- [=>]46.1% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \sin \color{blue}{\left(\lambda_1 - \left(\lambda_2 + \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Taylor expanded in phi2 around 0 44.4%
if -2e-66 < (-.f64 lambda1 lambda2) < -4.0000000000000002e-168 or -5.0000000000000001e-225 < (-.f64 lambda1 lambda2) Initial program 77.0%
Applied egg-rr76.2%
[Start]77.0% | \[ \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)}
\] |
|---|---|
log1p-expm1-u [=>]77.0% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right)} - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
log1p-udef [=>]76.2% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\color{blue}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right)} - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Applied egg-rr42.1%
[Start]76.2% | \[ \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
|---|---|
sin-cos-mult [=>]42.1% | \[ \tan^{-1}_* \frac{\color{blue}{\frac{\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)}{2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
frac-2neg [=>]42.1% | \[ \tan^{-1}_* \frac{\color{blue}{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{-2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
metadata-eval [=>]42.1% | \[ \tan^{-1}_* \frac{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{\color{blue}{-2}}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Simplified47.8%
[Start]42.1% | \[ \tan^{-1}_* \frac{\frac{-\left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
|---|---|
neg-sub0 [=>]47.8% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{0 - \left(\sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
+-commutative [=>]47.8% | \[ \tan^{-1}_* \frac{\frac{0 - \color{blue}{\left(\sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right) + \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
associate--r+ [=>]47.8% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{\left(0 - \sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right) - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
neg-sub0 [<=]47.8% | \[ \tan^{-1}_* \frac{\frac{\color{blue}{\left(-\sin \left(\left(\lambda_1 - \lambda_2\right) + \phi_2\right)\right)} - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
+-commutative [=>]47.8% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \color{blue}{\left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)}\right) - \sin \left(\left(\lambda_1 - \lambda_2\right) - \phi_2\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
associate--l- [=>]47.8% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \sin \color{blue}{\left(\lambda_1 - \left(\lambda_2 + \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Taylor expanded in phi2 around 0 39.6%
Simplified39.6%
[Start]39.6% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \left(-1 \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \phi_2\right) + \sin \left(\lambda_1 - \lambda_2\right)\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
|---|---|
+-commutative [=>]39.6% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) + -1 \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \phi_2\right)\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
mul-1-neg [=>]39.6% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \left(\sin \left(\lambda_1 - \lambda_2\right) + \color{blue}{\left(-\cos \left(\lambda_1 - \lambda_2\right) \cdot \phi_2\right)}\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
unsub-neg [=>]39.6% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \phi_2\right)}}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
*-commutative [=>]39.6% | \[ \tan^{-1}_* \frac{\frac{\left(-\sin \left(\phi_2 + \left(\lambda_1 - \lambda_2\right)\right)\right) - \left(\sin \left(\lambda_1 - \lambda_2\right) - \color{blue}{\phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right)}{-2}}{\log \left(1 + \mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\] |
Taylor expanded in phi2 around inf 12.6%
Final simplification27.4%
| Alternative 1 | |
|---|---|
| Accuracy | 18.9% |
| Cost | 73165 |
| Alternative 2 | |
|---|---|
| Accuracy | 19.7% |
| Cost | 105096 |
| Alternative 3 | |
|---|---|
| Accuracy | 18.3% |
| Cost | 72973 |
| Alternative 4 | |
|---|---|
| Accuracy | 18.4% |
| Cost | 59780 |
| Alternative 5 | |
|---|---|
| Accuracy | 14.9% |
| Cost | 59661 |
| Alternative 6 | |
|---|---|
| Accuracy | 18.1% |
| Cost | 52100 |
| Alternative 7 | |
|---|---|
| Accuracy | 17.4% |
| Cost | 19968 |
| Alternative 8 | |
|---|---|
| Accuracy | 14.1% |
| Cost | 19456 |
| Alternative 9 | |
|---|---|
| Accuracy | 9.3% |
| Cost | 19392 |
| Alternative 10 | |
|---|---|
| Accuracy | 13.4% |
| Cost | 19328 |
herbie shell --seed 2023171
(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))))))