| Alternative 1 | |
|---|---|
| Error | 19.3 |
| Cost | 70472 |
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R
(sqrt
(+
(*
(* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))
(* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))
(* (- phi1 phi2) (- phi1 phi2))))))(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (- phi1 phi2) (- phi1 phi2)))
(t_1 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))
(t_2 (* R (sqrt (+ (* t_1 t_1) t_0)))))
(if (<= t_2 (- INFINITY))
(- (* R (+ phi2 phi2)) (* R (+ phi1 phi2)))
(if (<= t_2 5e+273)
(*
R
(sqrt
(+
(*
(- lambda1 lambda2)
(*
(- lambda1 lambda2)
(+
0.5
(/ (- (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2))) 2.0))))
t_0)))
(* R (- phi2 phi1))))))double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * sqrt(((((lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0))) * ((lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)))) + ((phi1 - phi2) * (phi1 - phi2))));
}
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (phi1 - phi2) * (phi1 - phi2);
double t_1 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
double t_2 = R * sqrt(((t_1 * t_1) + t_0));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = (R * (phi2 + phi2)) - (R * (phi1 + phi2));
} else if (t_2 <= 5e+273) {
tmp = R * sqrt((((lambda1 - lambda2) * ((lambda1 - lambda2) * (0.5 + (((cos(phi1) * cos(phi2)) - (sin(phi1) * sin(phi2))) / 2.0)))) + t_0));
} else {
tmp = R * (phi2 - phi1);
}
return tmp;
}
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * Math.sqrt(((((lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0))) * ((lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0)))) + ((phi1 - phi2) * (phi1 - phi2))));
}
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (phi1 - phi2) * (phi1 - phi2);
double t_1 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
double t_2 = R * Math.sqrt(((t_1 * t_1) + t_0));
double tmp;
if (t_2 <= -Double.POSITIVE_INFINITY) {
tmp = (R * (phi2 + phi2)) - (R * (phi1 + phi2));
} else if (t_2 <= 5e+273) {
tmp = R * Math.sqrt((((lambda1 - lambda2) * ((lambda1 - lambda2) * (0.5 + (((Math.cos(phi1) * Math.cos(phi2)) - (Math.sin(phi1) * Math.sin(phi2))) / 2.0)))) + t_0));
} else {
tmp = R * (phi2 - phi1);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): return R * math.sqrt(((((lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0))) * ((lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)))) + ((phi1 - phi2) * (phi1 - phi2))))
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (phi1 - phi2) * (phi1 - phi2) t_1 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) t_2 = R * math.sqrt(((t_1 * t_1) + t_0)) tmp = 0 if t_2 <= -math.inf: tmp = (R * (phi2 + phi2)) - (R * (phi1 + phi2)) elif t_2 <= 5e+273: tmp = R * math.sqrt((((lambda1 - lambda2) * ((lambda1 - lambda2) * (0.5 + (((math.cos(phi1) * math.cos(phi2)) - (math.sin(phi1) * math.sin(phi2))) / 2.0)))) + t_0)) else: tmp = R * (phi2 - phi1) return tmp
function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * sqrt(Float64(Float64(Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) * Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0)))) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))) end
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2)) t_1 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) t_2 = Float64(R * sqrt(Float64(Float64(t_1 * t_1) + t_0))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(Float64(R * Float64(phi2 + phi2)) - Float64(R * Float64(phi1 + phi2))); elseif (t_2 <= 5e+273) tmp = Float64(R * sqrt(Float64(Float64(Float64(lambda1 - lambda2) * Float64(Float64(lambda1 - lambda2) * Float64(0.5 + Float64(Float64(Float64(cos(phi1) * cos(phi2)) - Float64(sin(phi1) * sin(phi2))) / 2.0)))) + t_0))); else tmp = Float64(R * Float64(phi2 - phi1)); end return tmp end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = R * sqrt(((((lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0))) * ((lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)))) + ((phi1 - phi2) * (phi1 - phi2)))); end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = (phi1 - phi2) * (phi1 - phi2); t_1 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); t_2 = R * sqrt(((t_1 * t_1) + t_0)); tmp = 0.0; if (t_2 <= -Inf) tmp = (R * (phi2 + phi2)) - (R * (phi1 + phi2)); elseif (t_2 <= 5e+273) tmp = R * sqrt((((lambda1 - lambda2) * ((lambda1 - lambda2) * (0.5 + (((cos(phi1) * cos(phi2)) - (sin(phi1) * sin(phi2))) / 2.0)))) + t_0)); else tmp = R * (phi2 - phi1); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[Sqrt[N[(N[(N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(R * N[Sqrt[N[(N[(t$95$1 * t$95$1), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, (-Infinity)], N[(N[(R * N[(phi2 + phi2), $MachinePrecision]), $MachinePrecision] - N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e+273], N[(R * N[Sqrt[N[(N[(N[(lambda1 - lambda2), $MachinePrecision] * N[(N[(lambda1 - lambda2), $MachinePrecision] * N[(0.5 + N[(N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[(phi2 - phi1), $MachinePrecision]), $MachinePrecision]]]]]]
R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\begin{array}{l}
t_0 := \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)\\
t_1 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
t_2 := R \cdot \sqrt{t_1 \cdot t_1 + t_0}\\
\mathbf{if}\;t_2 \leq -\infty:\\
\;\;\;\;R \cdot \left(\phi_2 + \phi_2\right) - R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{elif}\;t_2 \leq 5 \cdot 10^{+273}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(0.5 + \frac{\cos \phi_1 \cdot \cos \phi_2 - \sin \phi_1 \cdot \sin \phi_2}{2}\right)\right) + t_0}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}
Results
if (*.f64 R (sqrt.f64 (+.f64 (*.f64 (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2))) (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2)))) (*.f64 (-.f64 phi1 phi2) (-.f64 phi1 phi2))))) < -inf.0Initial program 64.0
Simplified64.0
[Start]64.0 | \[ R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
|---|
Taylor expanded in phi2 around 0 64.0
Simplified64.0
[Start]64.0 | \[ R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(0.5 + \frac{\cos \phi_1 + -1 \cdot \left(\sin \phi_1 \cdot \phi_2\right)}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
|---|---|
rational_best-simplify-50 [=>]64.0 | \[ R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(0.5 + \frac{\cos \phi_1 + \color{blue}{\phi_2 \cdot \left(\sin \phi_1 \cdot -1\right)}}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
rational_best-simplify-10 [=>]64.0 | \[ R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(0.5 + \frac{\cos \phi_1 + \phi_2 \cdot \color{blue}{\left(-\sin \phi_1\right)}}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
Taylor expanded in phi1 around -inf 29.8
Simplified29.8
[Start]29.8 | \[ R \cdot \phi_2 + -1 \cdot \left(\phi_1 \cdot R\right)
\] |
|---|---|
rational_best-simplify-1 [=>]29.8 | \[ \color{blue}{\phi_2 \cdot R} + -1 \cdot \left(\phi_1 \cdot R\right)
\] |
rational_best-simplify-1 [=>]29.8 | \[ \phi_2 \cdot R + -1 \cdot \color{blue}{\left(R \cdot \phi_1\right)}
\] |
rational_best-simplify-50 [=>]29.8 | \[ \phi_2 \cdot R + \color{blue}{\phi_1 \cdot \left(R \cdot -1\right)}
\] |
rational_best-simplify-10 [=>]29.8 | \[ \phi_2 \cdot R + \phi_1 \cdot \color{blue}{\left(-R\right)}
\] |
Applied egg-rr29.9
if -inf.0 < (*.f64 R (sqrt.f64 (+.f64 (*.f64 (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2))) (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2)))) (*.f64 (-.f64 phi1 phi2) (-.f64 phi1 phi2))))) < 4.99999999999999961e273Initial program 1.9
Simplified2.0
[Start]1.9 | \[ R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
|---|
Applied egg-rr0.8
if 4.99999999999999961e273 < (*.f64 R (sqrt.f64 (+.f64 (*.f64 (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2))) (*.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) 2)))) (*.f64 (-.f64 phi1 phi2) (-.f64 phi1 phi2))))) Initial program 61.8
Simplified61.8
[Start]61.8 | \[ R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
|---|---|
rational_best-simplify-1 [=>]61.8 | \[ R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \color{blue}{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
rational_best-simplify-50 [=>]61.8 | \[ R \cdot \sqrt{\color{blue}{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)\right)} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\] |
Taylor expanded in phi1 around -inf 30.8
Simplified30.8
[Start]30.8 | \[ R \cdot \left(-1 \cdot \phi_1 + \phi_2\right)
\] |
|---|---|
rational_best-simplify-3 [=>]30.8 | \[ R \cdot \color{blue}{\left(\phi_2 + -1 \cdot \phi_1\right)}
\] |
rational_best-simplify-1 [=>]30.8 | \[ R \cdot \left(\phi_2 + \color{blue}{\phi_1 \cdot -1}\right)
\] |
rational_best-simplify-10 [=>]30.8 | \[ R \cdot \left(\phi_2 + \color{blue}{\left(-\phi_1\right)}\right)
\] |
Taylor expanded in R around 0 30.8
Final simplification18.9
| Alternative 1 | |
|---|---|
| Error | 19.3 |
| Cost | 70472 |
| Alternative 2 | |
|---|---|
| Error | 19.3 |
| Cost | 63304 |
| Alternative 3 | |
|---|---|
| Error | 31.6 |
| Cost | 14216 |
| Alternative 4 | |
|---|---|
| Error | 33.6 |
| Cost | 7772 |
| Alternative 5 | |
|---|---|
| Error | 33.6 |
| Cost | 7772 |
| Alternative 6 | |
|---|---|
| Error | 33.6 |
| Cost | 7772 |
| Alternative 7 | |
|---|---|
| Error | 33.5 |
| Cost | 7772 |
| Alternative 8 | |
|---|---|
| Error | 33.4 |
| Cost | 7772 |
| Alternative 9 | |
|---|---|
| Error | 33.4 |
| Cost | 7772 |
| Alternative 10 | |
|---|---|
| Error | 33.2 |
| Cost | 7772 |
| Alternative 11 | |
|---|---|
| Error | 31.6 |
| Cost | 7632 |
| Alternative 12 | |
|---|---|
| Error | 33.0 |
| Cost | 7304 |
| Alternative 13 | |
|---|---|
| Error | 35.0 |
| Cost | 916 |
| Alternative 14 | |
|---|---|
| Error | 32.2 |
| Cost | 848 |
| Alternative 15 | |
|---|---|
| Error | 32.2 |
| Cost | 848 |
| Alternative 16 | |
|---|---|
| Error | 32.2 |
| Cost | 848 |
| Alternative 17 | |
|---|---|
| Error | 32.2 |
| Cost | 848 |
| Alternative 18 | |
|---|---|
| Error | 43.0 |
| Cost | 388 |
| Alternative 19 | |
|---|---|
| Error | 45.9 |
| Cost | 192 |
herbie shell --seed 2023099
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))