| Alternative 1 | |
|---|---|
| Error | 2.3 |
| Cost | 143560 |
(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 (* (sin lambda1) (sin lambda2)))
(t_2 (* (cos lambda1) (cos lambda2)))
(t_3 (* (sin phi1) (sin phi2)))
(t_4 (* (acos (+ t_3 (* t_0 (cos (- lambda1 lambda2))))) R)))
(if (<= t_4 -2e-307)
(*
R
(acos
(fma
(sin phi1)
(sin phi2)
(* (cos phi2) (* (cos phi1) (+ (cbrt (pow t_1 3.0)) t_2))))))
(if (<= t_4 0.0)
(* R (- lambda2 lambda1))
(* R (acos (fma t_0 t_2 (fma t_0 t_1 t_3))))))))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 = sin(lambda1) * sin(lambda2);
double t_2 = cos(lambda1) * cos(lambda2);
double t_3 = sin(phi1) * sin(phi2);
double t_4 = acos((t_3 + (t_0 * cos((lambda1 - lambda2))))) * R;
double tmp;
if (t_4 <= -2e-307) {
tmp = R * acos(fma(sin(phi1), sin(phi2), (cos(phi2) * (cos(phi1) * (cbrt(pow(t_1, 3.0)) + t_2)))));
} else if (t_4 <= 0.0) {
tmp = R * (lambda2 - lambda1);
} else {
tmp = R * acos(fma(t_0, t_2, fma(t_0, t_1, t_3)));
}
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(sin(lambda1) * sin(lambda2)) t_2 = Float64(cos(lambda1) * cos(lambda2)) t_3 = Float64(sin(phi1) * sin(phi2)) t_4 = Float64(acos(Float64(t_3 + Float64(t_0 * cos(Float64(lambda1 - lambda2))))) * R) tmp = 0.0 if (t_4 <= -2e-307) tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi2) * Float64(cos(phi1) * Float64(cbrt((t_1 ^ 3.0)) + t_2)))))); elseif (t_4 <= 0.0) tmp = Float64(R * Float64(lambda2 - lambda1)); else tmp = Float64(R * acos(fma(t_0, t_2, fma(t_0, t_1, t_3)))); 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[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(N[ArcCos[N[(t$95$3 + N[(t$95$0 * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]}, If[LessEqual[t$95$4, -2e-307], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[(N[Power[N[Power[t$95$1, 3.0], $MachinePrecision], 1/3], $MachinePrecision] + t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$4, 0.0], N[(R * N[(lambda2 - lambda1), $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(t$95$0 * t$95$2 + N[(t$95$0 * t$95$1 + t$95$3), $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 := \sin \lambda_1 \cdot \sin \lambda_2\\
t_2 := \cos \lambda_1 \cdot \cos \lambda_2\\
t_3 := \sin \phi_1 \cdot \sin \phi_2\\
t_4 := \cos^{-1} \left(t_3 + t_0 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\\
\mathbf{if}\;t_4 \leq -2 \cdot 10^{-307}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \left(\sqrt[3]{{t_1}^{3}} + t_2\right)\right)\right)\right)\\
\mathbf{elif}\;t_4 \leq 0:\\
\;\;\;\;R \cdot \left(\lambda_2 - \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(t_0, t_2, \mathsf{fma}\left(t_0, t_1, t_3\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) < -1.99999999999999982e-307Initial program 14.3
Simplified14.3
[Start]14.3 | \[ \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.3 | \[ \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
\] |
*-commutative [=>]14.3 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\left(\cos \phi_2 \cdot \cos \phi_1\right)} \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R
\] |
associate-*l* [=>]14.3 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Applied egg-rr0.7
Applied egg-rr0.7
if -1.99999999999999982e-307 < (*.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 55.4
Simplified55.4
[Start]55.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 [=>]55.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
\] |
*-commutative [=>]55.4 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\left(\cos \phi_2 \cdot \cos \phi_1\right)} \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R
\] |
associate-*l* [=>]55.4 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Taylor expanded in phi2 around 0 55.7
Taylor expanded in phi1 around 0 55.7
Simplified55.7
[Start]55.7 | \[ \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R
\] |
|---|---|
sub-neg [=>]55.7 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot R
\] |
remove-double-neg [<=]55.7 | \[ \cos^{-1} \cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right) \cdot R
\] |
mul-1-neg [<=]55.7 | \[ \cos^{-1} \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right) \cdot R
\] |
distribute-neg-in [<=]55.7 | \[ \cos^{-1} \cos \color{blue}{\left(-\left(-1 \cdot \lambda_1 + \lambda_2\right)\right)} \cdot R
\] |
cos-neg [=>]55.7 | \[ \cos^{-1} \color{blue}{\cos \left(-1 \cdot \lambda_1 + \lambda_2\right)} \cdot R
\] |
+-commutative [=>]55.7 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot R
\] |
mul-1-neg [=>]55.7 | \[ \cos^{-1} \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right) \cdot R
\] |
unsub-neg [=>]55.7 | \[ \cos^{-1} \cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot R
\] |
Taylor expanded in lambda2 around 0 27.1
Simplified27.1
[Start]27.1 | \[ \left(-1 \cdot \lambda_1 + \lambda_2\right) \cdot R
\] |
|---|---|
mul-1-neg [=>]27.1 | \[ \left(\color{blue}{\left(-\lambda_1\right)} + \lambda_2\right) \cdot R
\] |
+-commutative [=>]27.1 | \[ \color{blue}{\left(\lambda_2 + \left(-\lambda_1\right)\right)} \cdot R
\] |
sub-neg [<=]27.1 | \[ \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.9
Simplified14.9
[Start]14.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 [=>]14.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
\] |
*-commutative [=>]14.9 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\left(\cos \phi_2 \cdot \cos \phi_1\right)} \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R
\] |
associate-*l* [=>]14.9 | \[ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right)\right) \cdot R
\] |
Applied egg-rr0.9
Simplified0.9
[Start]0.9 | \[ \cos^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
\] |
|---|---|
fma-def [=>]0.9 | \[ \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1 \cdot \cos \lambda_2, \left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R
\] |
*-commutative [=>]0.9 | \[ \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}, \left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
\] |
fma-def [=>]0.9 | \[ \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_2 \cdot \cos \lambda_1, \color{blue}{\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \sin \lambda_1 \cdot \sin \lambda_2, \sin \phi_1 \cdot \sin \phi_2\right)}\right)\right) \cdot R
\] |
Final simplification2.3
| Alternative 1 | |
|---|---|
| Error | 2.3 |
| Cost | 143560 |
| Alternative 2 | |
|---|---|
| Error | 2.3 |
| Cost | 137288 |
| Alternative 3 | |
|---|---|
| Error | 3.9 |
| Cost | 97732 |
| Alternative 4 | |
|---|---|
| Error | 3.9 |
| Cost | 91460 |
| Alternative 5 | |
|---|---|
| Error | 10.5 |
| Cost | 58568 |
| Alternative 6 | |
|---|---|
| Error | 10.5 |
| Cost | 58568 |
| Alternative 7 | |
|---|---|
| Error | 10.5 |
| Cost | 52552 |
| Alternative 8 | |
|---|---|
| Error | 10.6 |
| Cost | 52424 |
| Alternative 9 | |
|---|---|
| Error | 10.7 |
| Cost | 45636 |
| Alternative 10 | |
|---|---|
| Error | 10.7 |
| Cost | 39620 |
| Alternative 11 | |
|---|---|
| Error | 15.5 |
| Cost | 39500 |
| Alternative 12 | |
|---|---|
| Error | 15.5 |
| Cost | 39500 |
| Alternative 13 | |
|---|---|
| Error | 10.7 |
| Cost | 39497 |
| Alternative 14 | |
|---|---|
| Error | 16.8 |
| Cost | 39369 |
| Alternative 15 | |
|---|---|
| Error | 21.8 |
| Cost | 39368 |
| Alternative 16 | |
|---|---|
| Error | 27.9 |
| Cost | 33096 |
| Alternative 17 | |
|---|---|
| Error | 28.0 |
| Cost | 32708 |
| Alternative 18 | |
|---|---|
| Error | 37.8 |
| Cost | 20040 |
| Alternative 19 | |
|---|---|
| Error | 32.1 |
| Cost | 19780 |
| Alternative 20 | |
|---|---|
| Error | 43.5 |
| Cost | 19652 |
| Alternative 21 | |
|---|---|
| Error | 36.8 |
| Cost | 19652 |
| Alternative 22 | |
|---|---|
| Error | 51.5 |
| Cost | 13124 |
| Alternative 23 | |
|---|---|
| Error | 47.3 |
| Cost | 13124 |
| Alternative 24 | |
|---|---|
| Error | 47.2 |
| Cost | 13120 |
| Alternative 25 | |
|---|---|
| Error | 59.0 |
| Cost | 388 |
| Alternative 26 | |
|---|---|
| Error | 59.0 |
| Cost | 320 |
| Alternative 27 | |
|---|---|
| Error | 60.0 |
| Cost | 192 |
herbie shell --seed 2023060
(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))