| Alternative 1 | |
|---|---|
| Error | 2.6 |
| Cost | 143561 |
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
(acos
(+
(* (sin phi1) (sin phi2))
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R))(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (cos phi1) (cos phi2)))
(t_1
(*
(acos
(+ (* (sin phi1) (sin phi2)) (* (cos (- lambda1 lambda2)) t_0)))
R))
(t_2 (* (sin lambda1) (sin lambda2))))
(if (<= t_1 -1e-302)
(*
R
(-
(* PI 0.5)
(asin
(fma
(sin phi1)
(sin phi2)
(*
(cos phi1)
(*
(cos phi2)
(fma (cos lambda2) (cos lambda1) (+ (exp (log1p t_2)) -1.0))))))))
(if (<= t_1 0.0)
(* R (- lambda2 lambda1))
(*
R
(acos
(fma
(sin phi1)
(sin phi2)
(* t_0 (+ t_2 (* (cos lambda2) (cos lambda1)))))))))))double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos(phi1) * cos(phi2);
double t_1 = acos(((sin(phi1) * sin(phi2)) + (cos((lambda1 - lambda2)) * t_0))) * R;
double t_2 = sin(lambda1) * sin(lambda2);
double tmp;
if (t_1 <= -1e-302) {
tmp = R * ((((double) M_PI) * 0.5) - asin(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * fma(cos(lambda2), cos(lambda1), (exp(log1p(t_2)) + -1.0)))))));
} else if (t_1 <= 0.0) {
tmp = R * (lambda2 - lambda1);
} else {
tmp = R * acos(fma(sin(phi1), sin(phi2), (t_0 * (t_2 + (cos(lambda2) * cos(lambda1))))));
}
return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R) end
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(cos(phi1) * cos(phi2)) t_1 = Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(Float64(lambda1 - lambda2)) * t_0))) * R) t_2 = Float64(sin(lambda1) * sin(lambda2)) tmp = 0.0 if (t_1 <= -1e-302) tmp = Float64(R * Float64(Float64(pi * 0.5) - asin(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * fma(cos(lambda2), cos(lambda1), Float64(exp(log1p(t_2)) + -1.0)))))))); elseif (t_1 <= 0.0) tmp = Float64(R * Float64(lambda2 - lambda1)); else tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(t_0 * Float64(t_2 + Float64(cos(lambda2) * cos(lambda1))))))); end return tmp end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-302], N[(R * N[(N[(Pi * 0.5), $MachinePrecision] - N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Exp[N[Log[1 + t$95$2], $MachinePrecision]], $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(R * N[(lambda2 - lambda1), $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(t$95$0 * N[(t$95$2 + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\begin{array}{l}
t_0 := \cos \phi_1 \cdot \cos \phi_2\\
t_1 := \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot t_0\right) \cdot R\\
t_2 := \sin \lambda_1 \cdot \sin \lambda_2\\
\mathbf{if}\;t_1 \leq -1 \cdot 10^{-302}:\\
\;\;\;\;R \cdot \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, e^{\mathsf{log1p}\left(t_2\right)} + -1\right)\right)\right)\right)\right)\\
\mathbf{elif}\;t_1 \leq 0:\\
\;\;\;\;R \cdot \left(\lambda_2 - \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, t_0 \cdot \left(t_2 + \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\\
\end{array}
if (*.f64 (acos.f64 (+.f64 (*.f64 (sin.f64 phi1) (sin.f64 phi2)) (*.f64 (*.f64 (cos.f64 phi1) (cos.f64 phi2)) (cos.f64 (-.f64 lambda1 lambda2))))) R) < -9.9999999999999996e-303Initial program 14.4
Simplified14.4
[Start]14.4 | \[ \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\] |
|---|---|
fma-def [=>]14.4 | \[ \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R
\] |
associate-*l* [=>]14.4 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Applied egg-rr14.4
Simplified14.4
[Start]14.4 | \[ \left(\pi \cdot 0.5 + \left(-\sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)\right)\right) \cdot R
\] |
|---|---|
sub-neg [<=]14.4 | \[ \color{blue}{\left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)\right)} \cdot R
\] |
*-commutative [=>]14.4 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)}\right)\right)\right) \cdot R
\] |
Applied egg-rr0.8
Simplified0.8
[Start]0.8 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R
\] |
|---|---|
*-commutative [=>]0.8 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R
\] |
cos-neg [<=]0.8 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\left(\color{blue}{\cos \left(-\lambda_2\right)} \cdot \cos \lambda_1 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R
\] |
fma-def [=>]0.8 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\color{blue}{\mathsf{fma}\left(\cos \left(-\lambda_2\right), \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R
\] |
cos-neg [=>]0.8 | \[ \left(\pi \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2}, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R
\] |
Applied egg-rr0.8
if -9.9999999999999996e-303 < (*.f64 (acos.f64 (+.f64 (*.f64 (sin.f64 phi1) (sin.f64 phi2)) (*.f64 (*.f64 (cos.f64 phi1) (cos.f64 phi2)) (cos.f64 (-.f64 lambda1 lambda2))))) R) < -0.0Initial program 51.9
Simplified51.9
[Start]51.9 | \[ \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\] |
|---|---|
fma-def [=>]51.9 | \[ \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R
\] |
associate-*l* [=>]51.9 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Taylor expanded in phi2 around 0 53.1
Taylor expanded in phi1 around 0 53.9
Simplified53.9
[Start]53.9 | \[ \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R
\] |
|---|---|
sub-neg [=>]53.9 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot R
\] |
remove-double-neg [<=]53.9 | \[ \cos^{-1} \cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right) \cdot R
\] |
mul-1-neg [<=]53.9 | \[ \cos^{-1} \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right) \cdot R
\] |
distribute-neg-in [<=]53.9 | \[ \cos^{-1} \cos \color{blue}{\left(-\left(-1 \cdot \lambda_1 + \lambda_2\right)\right)} \cdot R
\] |
cos-neg [=>]53.9 | \[ \cos^{-1} \color{blue}{\cos \left(-1 \cdot \lambda_1 + \lambda_2\right)} \cdot R
\] |
+-commutative [=>]53.9 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot R
\] |
mul-1-neg [=>]53.9 | \[ \cos^{-1} \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right) \cdot R
\] |
unsub-neg [=>]53.9 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot R
\] |
Taylor expanded in lambda2 around 0 29.7
Simplified29.7
[Start]29.7 | \[ \left(-1 \cdot \lambda_1 + \lambda_2\right) \cdot R
\] |
|---|---|
mul-1-neg [=>]29.7 | \[ \left(\color{blue}{\left(-\lambda_1\right)} + \lambda_2\right) \cdot R
\] |
+-commutative [=>]29.7 | \[ \color{blue}{\left(\lambda_2 + \left(-\lambda_1\right)\right)} \cdot R
\] |
sub-neg [<=]29.7 | \[ \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot R
\] |
if -0.0 < (*.f64 (acos.f64 (+.f64 (*.f64 (sin.f64 phi1) (sin.f64 phi2)) (*.f64 (*.f64 (cos.f64 phi1) (cos.f64 phi2)) (cos.f64 (-.f64 lambda1 lambda2))))) R) Initial program 14.2
Simplified14.2
[Start]14.2 | \[ \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\] |
|---|---|
fma-def [=>]14.2 | \[ \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R
\] |
associate-*l* [=>]14.2 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Applied egg-rr0.8
Simplified0.8
[Start]0.8 | \[ \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
\] |
|---|---|
+-commutative [=>]0.8 | \[ \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\right) \cdot R
\] |
*-commutative [<=]0.8 | \[ \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R
\] |
+-commutative [<=]0.8 | \[ \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \color{blue}{\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)}\right) \cdot R
\] |
associate-+r+ [=>]0.8 | \[ \cos^{-1} \color{blue}{\left(\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R
\] |
+-commutative [=>]0.8 | \[ \cos^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right)} \cdot R
\] |
fma-def [=>]0.8 | \[ \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right)} \cdot R
\] |
Final simplification2.7
| Alternative 1 | |
|---|---|
| Error | 2.6 |
| Cost | 143561 |
| Alternative 2 | |
|---|---|
| Error | 2.7 |
| Cost | 143560 |
| Alternative 3 | |
|---|---|
| Error | 2.7 |
| Cost | 143560 |
| Alternative 4 | |
|---|---|
| Error | 2.6 |
| Cost | 137289 |
| Alternative 5 | |
|---|---|
| Error | 10.7 |
| Cost | 58696 |
| Alternative 6 | |
|---|---|
| Error | 10.6 |
| Cost | 58696 |
| Alternative 7 | |
|---|---|
| Error | 10.8 |
| Cost | 58568 |
| Alternative 8 | |
|---|---|
| Error | 10.8 |
| Cost | 58568 |
| Alternative 9 | |
|---|---|
| Error | 10.8 |
| Cost | 45892 |
| Alternative 10 | |
|---|---|
| Error | 10.8 |
| Cost | 45892 |
| Alternative 11 | |
|---|---|
| Error | 10.8 |
| Cost | 45768 |
| Alternative 12 | |
|---|---|
| Error | 10.8 |
| Cost | 45641 |
| Alternative 13 | |
|---|---|
| Error | 15.9 |
| Cost | 39500 |
| Alternative 14 | |
|---|---|
| Error | 10.8 |
| Cost | 39497 |
| Alternative 15 | |
|---|---|
| Error | 28.2 |
| Cost | 39377 |
| Alternative 16 | |
|---|---|
| Error | 28.2 |
| Cost | 39377 |
| Alternative 17 | |
|---|---|
| Error | 22.7 |
| Cost | 39377 |
| Alternative 18 | |
|---|---|
| Error | 17.1 |
| Cost | 39369 |
| Alternative 19 | |
|---|---|
| Error | 28.2 |
| Cost | 33480 |
| Alternative 20 | |
|---|---|
| Error | 28.3 |
| Cost | 33105 |
| Alternative 21 | |
|---|---|
| Error | 28.4 |
| Cost | 33105 |
| Alternative 22 | |
|---|---|
| Error | 43.0 |
| Cost | 19916 |
| Alternative 23 | |
|---|---|
| Error | 40.4 |
| Cost | 19916 |
| Alternative 24 | |
|---|---|
| Error | 33.3 |
| Cost | 19780 |
| Alternative 25 | |
|---|---|
| Error | 32.0 |
| Cost | 19780 |
| Alternative 26 | |
|---|---|
| Error | 36.7 |
| Cost | 19652 |
| Alternative 27 | |
|---|---|
| Error | 50.0 |
| Cost | 13388 |
| Alternative 28 | |
|---|---|
| Error | 46.1 |
| Cost | 13256 |
| Alternative 29 | |
|---|---|
| Error | 44.6 |
| Cost | 13252 |
| Alternative 30 | |
|---|---|
| Error | 51.2 |
| Cost | 13124 |
| Alternative 31 | |
|---|---|
| Error | 47.1 |
| Cost | 13124 |
| Alternative 32 | |
|---|---|
| Error | 58.6 |
| Cost | 521 |
| Alternative 33 | |
|---|---|
| Error | 58.8 |
| Cost | 320 |
| Alternative 34 | |
|---|---|
| Error | 60.0 |
| Cost | 192 |
herbie shell --seed 2023039
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))