Spherical law of cosines

Percentage Accurate: 73.4% → 93.9%
Time: 18.6s
Alternatives: 20
Speedup: 1.0×

Specification

?
\[\begin{array}{l} \\ \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 \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (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) {
	return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
    real(8), intent (in) :: r
    real(8), intent (in) :: lambda1
    real(8), intent (in) :: lambda2
    real(8), intent (in) :: phi1
    real(8), intent (in) :: phi2
    code = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2):
	return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
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 tmp = code(R, lambda1, lambda2, phi1, phi2)
	tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
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]
\begin{array}{l}

\\
\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
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 20 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 73.4% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \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 \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (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) {
	return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
    real(8), intent (in) :: r
    real(8), intent (in) :: lambda1
    real(8), intent (in) :: lambda2
    real(8), intent (in) :: phi1
    real(8), intent (in) :: phi2
    code = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2):
	return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
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 tmp = code(R, lambda1, lambda2, phi1, phi2)
	tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
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]
\begin{array}{l}

\\
\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
\end{array}

Alternative 1: 93.9% accurate, 0.5× speedup?

\[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right)\right)\right) \cdot R \end{array} \]
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (acos
   (fma
    (* (* (sin lambda2) (sin lambda1)) (cos phi2))
    (cos phi1)
    (fma
     (sin phi1)
     (sin phi2)
     (* (* (* (cos phi1) (cos phi2)) (cos lambda2)) (cos lambda1)))))
  R))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return acos(fma(((sin(lambda2) * sin(lambda1)) * cos(phi2)), cos(phi1), fma(sin(phi1), sin(phi2), (((cos(phi1) * cos(phi2)) * cos(lambda2)) * cos(lambda1))))) * R;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(acos(fma(Float64(Float64(sin(lambda2) * sin(lambda1)) * cos(phi2)), cos(phi1), fma(sin(phi1), sin(phi2), Float64(Float64(Float64(cos(phi1) * cos(phi2)) * cos(lambda2)) * cos(lambda1))))) * R)
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\cos^{-1} \left(\mathsf{fma}\left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right)\right)\right) \cdot R
\end{array}
Derivation
  1. Initial program 75.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 \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
    2. lift--.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
    3. cos-diffN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
    4. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    5. lower-fma.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
    6. lower-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\cos \lambda_2}, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    7. lower-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \color{blue}{\cos \lambda_1}, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    8. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
    9. lower-*.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
    10. lower-sin.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2} \cdot \sin \lambda_1\right)\right) \cdot R \]
    11. lower-sin.f6494.7

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
  4. Applied rewrites94.7%

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
  5. Step-by-step derivation
    1. lift-+.f64N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)} \cdot R \]
    2. +-commutativeN/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
    3. lift-*.f64N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    4. lift-fma.f64N/A

      \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    5. distribute-lft-inN/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    6. associate-+l+N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
    7. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
    8. associate-*r*N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
    9. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \left(\color{blue}{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)} + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
  6. Applied rewrites94.7%

    \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\right)} \cdot R \]
  7. Step-by-step derivation
    1. lift-fma.f64N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
    2. +-commutativeN/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right) + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)} \cdot R \]
    3. lift-fma.f64N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2 + \sin \phi_2 \cdot \sin \phi_1\right)} + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right) \cdot R \]
    4. associate-+l+N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2 + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right)} \cdot R \]
    5. lift-*.f64N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right)} \cdot \cos \phi_2 + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
    6. associate-*l*N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)} + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
    7. lift-*.f64N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
    8. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_2 \cdot \sin \lambda_1\right)} \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
    9. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \color{blue}{\left(\cos \phi_2 \cdot \cos \phi_1\right)} + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
    10. associate-*r*N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \cos \phi_1} + \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)\right) \cdot R \]
  8. Applied rewrites94.7%

    \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right)\right)\right)} \cdot R \]
  9. Add Preprocessing

Alternative 2: 93.9% accurate, 0.5× speedup?

\[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\right) \cdot R \end{array} \]
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (acos
   (fma
    (* (* (cos phi2) (cos phi1)) (cos lambda1))
    (cos lambda2)
    (fma
     (* (* (sin lambda1) (sin lambda2)) (cos phi1))
     (cos phi2)
     (* (sin phi2) (sin phi1)))))
  R))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return acos(fma(((cos(phi2) * cos(phi1)) * cos(lambda1)), cos(lambda2), fma(((sin(lambda1) * sin(lambda2)) * cos(phi1)), cos(phi2), (sin(phi2) * sin(phi1))))) * R;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(acos(fma(Float64(Float64(cos(phi2) * cos(phi1)) * cos(lambda1)), cos(lambda2), fma(Float64(Float64(sin(lambda1) * sin(lambda2)) * cos(phi1)), cos(phi2), Float64(sin(phi2) * sin(phi1))))) * R)
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\right) \cdot R
\end{array}
Derivation
  1. Initial program 75.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 \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
    2. lift--.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
    3. cos-diffN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
    4. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    5. lower-fma.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
    6. lower-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\cos \lambda_2}, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    7. lower-cos.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \color{blue}{\cos \lambda_1}, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
    8. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
    9. lower-*.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
    10. lower-sin.f64N/A

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2} \cdot \sin \lambda_1\right)\right) \cdot R \]
    11. lower-sin.f6494.7

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
  4. Applied rewrites94.7%

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
  5. Step-by-step derivation
    1. lift-+.f64N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)} \cdot R \]
    2. +-commutativeN/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
    3. lift-*.f64N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    4. lift-fma.f64N/A

      \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    5. distribute-lft-inN/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
    6. associate-+l+N/A

      \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
    7. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
    8. associate-*r*N/A

      \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
    9. *-commutativeN/A

      \[\leadsto \cos^{-1} \left(\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \left(\color{blue}{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)} + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
  6. Applied rewrites94.7%

    \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\right)} \cdot R \]
  7. Add Preprocessing

Alternative 3: 93.9% accurate, 0.7× speedup?

\[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \end{array} \]
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (acos
   (fma
    (*
     (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
     (cos phi1))
    (cos phi2)
    (* (sin phi2) (sin phi1))))
  R))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return acos(fma((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi1)), cos(phi2), (sin(phi2) * sin(phi1)))) * R;
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(acos(fma(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi1)), cos(phi2), Float64(sin(phi2) * sin(phi1)))) * R)
end
NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R
\end{array}
Derivation
  1. Initial program 75.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 \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. Applied rewrites75.3%

      \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R} \]
    2. Step-by-step derivation
      1. lift-cos.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      2. lift--.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      3. cos-diffN/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      4. lift-cos.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\color{blue}{\cos \lambda_2} \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      5. lift-cos.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \lambda_2 \cdot \color{blue}{\cos \lambda_1} + \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      6. lift-*.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      7. lift-sin.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \color{blue}{\sin \lambda_2} \cdot \sin \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      8. lift-sin.f64N/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      9. +-commutativeN/A

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
      10. lift-fma.f6494.7

        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
    3. Applied rewrites94.7%

      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)} \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
    4. Add Preprocessing

    Alternative 4: 93.9% accurate, 0.7× speedup?

    \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \end{array} \]
    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
    (FPCore (R lambda1 lambda2 phi1 phi2)
     :precision binary64
     (*
      (acos
       (fma
        (*
         (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
         (cos phi2))
        (cos phi1)
        (* (sin phi2) (sin phi1))))
      R))
    assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
    	return acos(fma((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi2)), cos(phi1), (sin(phi2) * sin(phi1)))) * R;
    }
    
    R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
    function code(R, lambda1, lambda2, phi1, phi2)
    	return Float64(acos(fma(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi2)), cos(phi1), Float64(sin(phi2) * sin(phi1)))) * R)
    end
    
    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
    code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
    
    \begin{array}{l}
    [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
    \\
    \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R
    \end{array}
    
    Derivation
    1. Initial program 75.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 \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
      2. lift--.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
      3. cos-diffN/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
      4. +-commutativeN/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
      5. *-commutativeN/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
      6. lower-fma.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
      7. lower-sin.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
      8. lower-sin.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
      9. *-commutativeN/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
      10. lower-*.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
      11. lower-cos.f64N/A

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right)\right) \cdot R \]
      12. lower-cos.f6494.7

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right)\right) \cdot R \]
    4. Applied rewrites94.7%

      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)}\right) \cdot R \]
    5. Taylor expanded in lambda1 around inf

      \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
      2. lower-fma.f64N/A

        \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
    7. Applied rewrites94.7%

      \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
    8. Add Preprocessing

    Alternative 5: 83.3% accurate, 0.7× speedup?

    \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\ \mathbf{if}\;\phi_1 \leq -0.002:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\ \;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \end{array} \end{array} \]
    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
    (FPCore (R lambda1 lambda2 phi1 phi2)
     :precision binary64
     (let* ((t_0 (* (cos (- lambda2 lambda1)) (cos phi1))))
       (if (<= phi1 -0.002)
         (* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos phi2)))) R)
         (if (<= phi1 2e-70)
           (*
            (acos
             (+
              (* (sin phi2) phi1)
              (*
               (* (cos phi1) (cos phi2))
               (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))))))
            R)
           (* (acos (fma t_0 (cos phi2) (* (sin phi2) (sin phi1)))) R)))))
    assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
    	double t_0 = cos((lambda2 - lambda1)) * cos(phi1);
    	double tmp;
    	if (phi1 <= -0.002) {
    		tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(phi2)))) * R;
    	} else if (phi1 <= 2e-70) {
    		tmp = acos(((sin(phi2) * phi1) + ((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda2) * sin(lambda1)))))) * R;
    	} else {
    		tmp = acos(fma(t_0, cos(phi2), (sin(phi2) * sin(phi1)))) * R;
    	}
    	return tmp;
    }
    
    R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
    function code(R, lambda1, lambda2, phi1, phi2)
    	t_0 = Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))
    	tmp = 0.0
    	if (phi1 <= -0.002)
    		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(phi2)))) * R);
    	elseif (phi1 <= 2e-70)
    		tmp = Float64(acos(Float64(Float64(sin(phi2) * phi1) + Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda2) * sin(lambda1)))))) * R);
    	else
    		tmp = Float64(acos(fma(t_0, cos(phi2), Float64(sin(phi2) * sin(phi1)))) * R);
    	end
    	return tmp
    end
    
    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
    code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -0.002], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi1, 2e-70], N[(N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * phi1), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
    
    \begin{array}{l}
    [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
    \\
    \begin{array}{l}
    t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\
    \mathbf{if}\;\phi_1 \leq -0.002:\\
    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\
    
    \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\
    \;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\
    
    \mathbf{else}:\\
    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 3 regimes
    2. if phi1 < -2e-3

      1. Initial program 85.1%

        \[\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 \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-+.f64N/A

          \[\leadsto \cos^{-1} \color{blue}{\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 \]
        2. lift-*.f64N/A

          \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]
        3. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \sin \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        4. lower-fma.f6485.1

          \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
        5. lift-*.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right)\right) \cdot R \]
        6. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
        7. lift-*.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
        8. associate-*r*N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
        9. lower-*.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
        10. lower-*.f6485.1

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
        11. lift-cos.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        12. lift--.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        13. cos-diffN/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        14. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        15. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        16. cos-diff-revN/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        17. lower-cos.f64N/A

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        18. lower--.f6485.1

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
      4. Applied rewrites85.1%

        \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right)} \cdot R \]

      if -2e-3 < phi1 < 1.99999999999999999e-70

      1. Initial program 66.8%

        \[\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 \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-cos.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
        2. lift--.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
        3. cos-diffN/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
        4. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
        5. lower-fma.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
        6. lower-cos.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\cos \lambda_2}, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
        7. lower-cos.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \color{blue}{\cos \lambda_1}, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
        8. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
        9. lower-*.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
        10. lower-sin.f64N/A

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2} \cdot \sin \lambda_1\right)\right) \cdot R \]
        11. lower-sin.f6488.9

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
      4. Applied rewrites88.9%

        \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
      5. Taylor expanded in phi1 around 0

        \[\leadsto \cos^{-1} \left(\color{blue}{\phi_1 \cdot \sin \phi_2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
      6. Step-by-step derivation
        1. *-commutativeN/A

          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
        2. lower-*.f64N/A

          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
        3. lower-sin.f6488.7

          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2} \cdot \phi_1 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
      7. Applied rewrites88.7%

        \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]

      if 1.99999999999999999e-70 < phi1

      1. Initial program 77.8%

        \[\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 \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. Applied rewrites77.8%

          \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R} \]
      4. Recombined 3 regimes into one program.
      5. Add Preprocessing

      Alternative 6: 83.0% accurate, 0.7× speedup?

      \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\ \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \end{array} \end{array} \]
      NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
      (FPCore (R lambda1 lambda2 phi1 phi2)
       :precision binary64
       (let* ((t_0 (* (cos (- lambda2 lambda1)) (cos phi1))))
         (if (<= phi1 -3.35e-12)
           (* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos phi2)))) R)
           (if (<= phi1 2e-70)
             (*
              (acos
               (fma
                (* (* (cos phi2) (cos phi1)) (cos lambda1))
                (cos lambda2)
                (* (* (sin lambda1) (sin lambda2)) (cos phi2))))
              R)
             (* (acos (fma t_0 (cos phi2) (* (sin phi2) (sin phi1)))) R)))))
      assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
      double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
      	double t_0 = cos((lambda2 - lambda1)) * cos(phi1);
      	double tmp;
      	if (phi1 <= -3.35e-12) {
      		tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(phi2)))) * R;
      	} else if (phi1 <= 2e-70) {
      		tmp = acos(fma(((cos(phi2) * cos(phi1)) * cos(lambda1)), cos(lambda2), ((sin(lambda1) * sin(lambda2)) * cos(phi2)))) * R;
      	} else {
      		tmp = acos(fma(t_0, cos(phi2), (sin(phi2) * sin(phi1)))) * R;
      	}
      	return tmp;
      }
      
      R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
      function code(R, lambda1, lambda2, phi1, phi2)
      	t_0 = Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))
      	tmp = 0.0
      	if (phi1 <= -3.35e-12)
      		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(phi2)))) * R);
      	elseif (phi1 <= 2e-70)
      		tmp = Float64(acos(fma(Float64(Float64(cos(phi2) * cos(phi1)) * cos(lambda1)), cos(lambda2), Float64(Float64(sin(lambda1) * sin(lambda2)) * cos(phi2)))) * R);
      	else
      		tmp = Float64(acos(fma(t_0, cos(phi2), Float64(sin(phi2) * sin(phi1)))) * R);
      	end
      	return tmp
      end
      
      NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
      code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -3.35e-12], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi1, 2e-70], N[(N[ArcCos[N[(N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
      
      \begin{array}{l}
      [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
      \\
      \begin{array}{l}
      t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\
      \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12}:\\
      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\
      
      \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\
      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right) \cdot R\\
      
      \mathbf{else}:\\
      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 3 regimes
      2. if phi1 < -3.3500000000000001e-12

        1. Initial program 85.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 \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-+.f64N/A

            \[\leadsto \cos^{-1} \color{blue}{\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 \]
          2. lift-*.f64N/A

            \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]
          3. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \sin \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
          4. lower-fma.f6485.3

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
          5. lift-*.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right)\right) \cdot R \]
          6. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
          7. lift-*.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
          8. associate-*r*N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
          9. lower-*.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
          10. lower-*.f6485.3

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
          11. lift-cos.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          12. lift--.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          13. cos-diffN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          14. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          15. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          16. cos-diff-revN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          17. lower-cos.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          18. lower--.f6485.3

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
        4. Applied rewrites85.3%

          \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right)} \cdot R \]

        if -3.3500000000000001e-12 < phi1 < 1.99999999999999999e-70

        1. Initial program 66.5%

          \[\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 \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-cos.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
          2. lift--.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
          3. cos-diffN/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
          4. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
          5. lower-fma.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
          6. lower-cos.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\cos \lambda_2}, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
          7. lower-cos.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \color{blue}{\cos \lambda_1}, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R \]
          8. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
          9. lower-*.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot R \]
          10. lower-sin.f64N/A

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\sin \lambda_2} \cdot \sin \lambda_1\right)\right) \cdot R \]
          11. lower-sin.f6488.8

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
        4. Applied rewrites88.8%

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
        5. Step-by-step derivation
          1. lift-+.f64N/A

            \[\leadsto \cos^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)} \cdot R \]
          2. +-commutativeN/A

            \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
          3. lift-*.f64N/A

            \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
          4. lift-fma.f64N/A

            \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
          5. distribute-lft-inN/A

            \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
          6. associate-+l+N/A

            \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
          7. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
          8. associate-*r*N/A

            \[\leadsto \cos^{-1} \left(\color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
          9. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \left(\color{blue}{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)} + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
        6. Applied rewrites88.8%

          \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \mathsf{fma}\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right)\right)} \cdot R \]
        7. Taylor expanded in phi1 around 0

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \color{blue}{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right) \cdot R \]
        8. Step-by-step derivation
          1. *-commutativeN/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
          2. lower-*.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
          3. lower-*.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
          4. lower-sin.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \left(\color{blue}{\sin \lambda_1} \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          5. lower-sin.f64N/A

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \left(\sin \lambda_1 \cdot \color{blue}{\sin \lambda_2}\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          6. lower-cos.f6488.8

            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \color{blue}{\cos \phi_2}\right)\right) \cdot R \]
        9. Applied rewrites88.8%

          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \cos \lambda_1, \cos \lambda_2, \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\right)\right) \cdot R \]

        if 1.99999999999999999e-70 < phi1

        1. Initial program 77.8%

          \[\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 \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. Applied rewrites77.8%

            \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R} \]
        4. Recombined 3 regimes into one program.
        5. Add Preprocessing

        Alternative 7: 73.3% accurate, 1.0× speedup?

        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \sin \phi_2 \cdot \sin \phi_1\\ \mathbf{if}\;\lambda_2 \leq -5.4 \cdot 10^{+151}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\ \mathbf{elif}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\ \end{array} \end{array} \]
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        (FPCore (R lambda1 lambda2 phi1 phi2)
         :precision binary64
         (let* ((t_0 (* (sin phi2) (sin phi1))))
           (if (<= lambda2 -5.4e+151)
             (*
              (acos
               (*
                (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
                (cos phi1)))
              R)
             (if (or (<= lambda2 -7.5e-5) (not (<= lambda2 1.3e-7)))
               (* (acos (fma (* (cos lambda2) (cos phi2)) (cos phi1) t_0)) R)
               (* (acos (fma (* (cos phi2) (cos phi1)) (cos lambda1) t_0)) R)))))
        assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	double t_0 = sin(phi2) * sin(phi1);
        	double tmp;
        	if (lambda2 <= -5.4e+151) {
        		tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi1))) * R;
        	} else if ((lambda2 <= -7.5e-5) || !(lambda2 <= 1.3e-7)) {
        		tmp = acos(fma((cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R;
        	} else {
        		tmp = acos(fma((cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R;
        	}
        	return tmp;
        }
        
        R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
        function code(R, lambda1, lambda2, phi1, phi2)
        	t_0 = Float64(sin(phi2) * sin(phi1))
        	tmp = 0.0
        	if (lambda2 <= -5.4e+151)
        		tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi1))) * R);
        	elseif ((lambda2 <= -7.5e-5) || !(lambda2 <= 1.3e-7))
        		tmp = Float64(acos(fma(Float64(cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R);
        	else
        		tmp = Float64(acos(fma(Float64(cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R);
        	end
        	return tmp
        end
        
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda2, -5.4e+151], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[Or[LessEqual[lambda2, -7.5e-5], N[Not[LessEqual[lambda2, 1.3e-7]], $MachinePrecision]], N[(N[ArcCos[N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
        
        \begin{array}{l}
        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
        \\
        \begin{array}{l}
        t_0 := \sin \phi_2 \cdot \sin \phi_1\\
        \mathbf{if}\;\lambda_2 \leq -5.4 \cdot 10^{+151}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
        
        \mathbf{elif}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
        
        \mathbf{else}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 3 regimes
        2. if lambda2 < -5.4000000000000003e151

          1. Initial program 53.1%

            \[\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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            2. lift--.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            3. cos-diffN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
            4. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            5. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            6. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            8. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            9. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            10. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right)\right) \cdot R \]
            12. lower-cos.f6499.5

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right)\right) \cdot R \]
          4. Applied rewrites99.5%

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)}\right) \cdot R \]
          5. Taylor expanded in phi2 around 0

            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)} \cdot R \]
          6. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
            2. lower-*.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
            3. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
            4. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
            5. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
            6. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
            8. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
            10. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
            12. lower-cos.f6475.4

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
          7. Applied rewrites75.4%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]

          if -5.4000000000000003e151 < lambda2 < -7.49999999999999934e-5 or 1.29999999999999999e-7 < lambda2

          1. Initial program 62.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 \]
          2. Add Preprocessing
          3. Taylor expanded in lambda1 around 0

            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
          4. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
            2. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
            3. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            4. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            5. cos-negN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            6. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            7. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            8. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \color{blue}{\cos \phi_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            9. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
            10. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
            11. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
            12. lower-sin.f6462.3

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
          5. Applied rewrites62.3%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]

          if -7.49999999999999934e-5 < lambda2 < 1.29999999999999999e-7

          1. Initial program 90.5%

            \[\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 \]
          2. Add Preprocessing
          3. Taylor expanded in lambda2 around 0

            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
          4. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
            2. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
            3. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            4. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            5. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2} \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            6. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \color{blue}{\cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            7. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \color{blue}{\cos \lambda_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
            8. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
            10. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
            11. lower-sin.f6490.5

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
          5. Applied rewrites90.5%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
        3. Recombined 3 regimes into one program.
        4. Final simplification78.7%

          \[\leadsto \begin{array}{l} \mathbf{if}\;\lambda_2 \leq -5.4 \cdot 10^{+151}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\ \mathbf{elif}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \end{array} \]
        5. Add Preprocessing

        Alternative 8: 83.0% accurate, 1.0× speedup?

        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12} \lor \neg \left(\phi_1 \leq 2 \cdot 10^{-70}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\ \end{array} \end{array} \]
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        (FPCore (R lambda1 lambda2 phi1 phi2)
         :precision binary64
         (if (or (<= phi1 -3.35e-12) (not (<= phi1 2e-70)))
           (*
            (acos
             (fma
              (sin phi2)
              (sin phi1)
              (* (* (cos (- lambda2 lambda1)) (cos phi1)) (cos phi2))))
            R)
           (*
            (acos
             (*
              (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
              (cos phi2)))
            R)))
        assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	double tmp;
        	if ((phi1 <= -3.35e-12) || !(phi1 <= 2e-70)) {
        		tmp = acos(fma(sin(phi2), sin(phi1), ((cos((lambda2 - lambda1)) * cos(phi1)) * cos(phi2)))) * R;
        	} else {
        		tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi2))) * R;
        	}
        	return tmp;
        }
        
        R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
        function code(R, lambda1, lambda2, phi1, phi2)
        	tmp = 0.0
        	if ((phi1 <= -3.35e-12) || !(phi1 <= 2e-70))
        		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)) * cos(phi2)))) * R);
        	else
        		tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi2))) * R);
        	end
        	return tmp
        end
        
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi1, -3.35e-12], N[Not[LessEqual[phi1, 2e-70]], $MachinePrecision]], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
        
        \begin{array}{l}
        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
        \\
        \begin{array}{l}
        \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12} \lor \neg \left(\phi_1 \leq 2 \cdot 10^{-70}\right):\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\
        
        \mathbf{else}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 2 regimes
        2. if phi1 < -3.3500000000000001e-12 or 1.99999999999999999e-70 < phi1

          1. Initial program 81.5%

            \[\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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-+.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\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 \]
            2. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]
            3. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \sin \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            4. lower-fma.f6481.5

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
            5. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right)\right) \cdot R \]
            6. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
            7. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
            8. associate-*r*N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
            10. lower-*.f6481.5

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
            11. lift-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            12. lift--.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            13. cos-diffN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            14. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            15. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            16. cos-diff-revN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            17. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            18. lower--.f6481.5

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          4. Applied rewrites81.5%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right)} \cdot R \]

          if -3.3500000000000001e-12 < phi1 < 1.99999999999999999e-70

          1. Initial program 66.5%

            \[\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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            2. lift--.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            3. cos-diffN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
            4. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            5. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            6. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            8. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            9. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            10. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right)\right) \cdot R \]
            12. lower-cos.f6488.8

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right)\right) \cdot R \]
          4. Applied rewrites88.8%

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)}\right) \cdot R \]
          5. Taylor expanded in phi1 around 0

            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)} \cdot R \]
          6. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
            2. lower-*.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
            3. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
            4. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            5. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
            6. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            8. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            10. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            12. lower-cos.f6488.8

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
          7. Applied rewrites88.8%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]
        3. Recombined 2 regimes into one program.
        4. Final simplification84.5%

          \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12} \lor \neg \left(\phi_1 \leq 2 \cdot 10^{-70}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\ \end{array} \]
        5. Add Preprocessing

        Alternative 9: 83.0% accurate, 1.0× speedup?

        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\ \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \end{array} \end{array} \]
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        (FPCore (R lambda1 lambda2 phi1 phi2)
         :precision binary64
         (let* ((t_0 (* (cos (- lambda2 lambda1)) (cos phi1))))
           (if (<= phi1 -3.35e-12)
             (* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos phi2)))) R)
             (if (<= phi1 2e-70)
               (*
                (acos
                 (*
                  (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
                  (cos phi2)))
                R)
               (* (acos (fma t_0 (cos phi2) (* (sin phi2) (sin phi1)))) R)))))
        assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	double t_0 = cos((lambda2 - lambda1)) * cos(phi1);
        	double tmp;
        	if (phi1 <= -3.35e-12) {
        		tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(phi2)))) * R;
        	} else if (phi1 <= 2e-70) {
        		tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi2))) * R;
        	} else {
        		tmp = acos(fma(t_0, cos(phi2), (sin(phi2) * sin(phi1)))) * R;
        	}
        	return tmp;
        }
        
        R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
        function code(R, lambda1, lambda2, phi1, phi2)
        	t_0 = Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))
        	tmp = 0.0
        	if (phi1 <= -3.35e-12)
        		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(phi2)))) * R);
        	elseif (phi1 <= 2e-70)
        		tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi2))) * R);
        	else
        		tmp = Float64(acos(fma(t_0, cos(phi2), Float64(sin(phi2) * sin(phi1)))) * R);
        	end
        	return tmp
        end
        
        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
        code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -3.35e-12], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi1, 2e-70], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
        
        \begin{array}{l}
        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
        \\
        \begin{array}{l}
        t_0 := \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\\
        \mathbf{if}\;\phi_1 \leq -3.35 \cdot 10^{-12}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\
        
        \mathbf{elif}\;\phi_1 \leq 2 \cdot 10^{-70}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\
        
        \mathbf{else}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 3 regimes
        2. if phi1 < -3.3500000000000001e-12

          1. Initial program 85.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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-+.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\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 \]
            2. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]
            3. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \sin \phi_1} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            4. lower-fma.f6485.3

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
            5. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right)\right) \cdot R \]
            6. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
            7. lift-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right) \cdot R \]
            8. associate-*r*N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
            10. lower-*.f6485.3

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
            11. lift-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            12. lift--.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            13. cos-diffN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            14. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            15. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 + \color{blue}{\sin \lambda_2 \cdot \sin \lambda_1}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            16. cos-diff-revN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            17. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
            18. lower--.f6485.3

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
          4. Applied rewrites85.3%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2\right)\right)} \cdot R \]

          if -3.3500000000000001e-12 < phi1 < 1.99999999999999999e-70

          1. Initial program 66.5%

            \[\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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            2. lift--.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
            3. cos-diffN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
            4. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            5. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            6. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            8. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
            9. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            10. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right)\right) \cdot R \]
            12. lower-cos.f6488.8

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right)\right) \cdot R \]
          4. Applied rewrites88.8%

            \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)}\right) \cdot R \]
          5. Taylor expanded in phi1 around 0

            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)} \cdot R \]
          6. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
            2. lower-*.f64N/A

              \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
            3. +-commutativeN/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
            4. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            5. lower-fma.f64N/A

              \[\leadsto \cos^{-1} \left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
            6. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            7. lower-sin.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
            8. *-commutativeN/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            9. lower-*.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            10. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
            11. lower-cos.f64N/A

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
            12. lower-cos.f6488.8

              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
          7. Applied rewrites88.8%

            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]

          if 1.99999999999999999e-70 < phi1

          1. Initial program 77.8%

            \[\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 \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. Applied rewrites77.8%

              \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R} \]
          4. Recombined 3 regimes into one program.
          5. Add Preprocessing

          Alternative 10: 73.2% accurate, 1.0× speedup?

          \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \sin \phi_2 \cdot \sin \phi_1\\ \mathbf{if}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\ \end{array} \end{array} \]
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          (FPCore (R lambda1 lambda2 phi1 phi2)
           :precision binary64
           (let* ((t_0 (* (sin phi2) (sin phi1))))
             (if (or (<= lambda2 -7.5e-5) (not (<= lambda2 1.3e-7)))
               (* (acos (fma (* (cos lambda2) (cos phi2)) (cos phi1) t_0)) R)
               (* (acos (fma (* (cos phi2) (cos phi1)) (cos lambda1) t_0)) R))))
          assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
          	double t_0 = sin(phi2) * sin(phi1);
          	double tmp;
          	if ((lambda2 <= -7.5e-5) || !(lambda2 <= 1.3e-7)) {
          		tmp = acos(fma((cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R;
          	} else {
          		tmp = acos(fma((cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R;
          	}
          	return tmp;
          }
          
          R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
          function code(R, lambda1, lambda2, phi1, phi2)
          	t_0 = Float64(sin(phi2) * sin(phi1))
          	tmp = 0.0
          	if ((lambda2 <= -7.5e-5) || !(lambda2 <= 1.3e-7))
          		tmp = Float64(acos(fma(Float64(cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R);
          	else
          		tmp = Float64(acos(fma(Float64(cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R);
          	end
          	return tmp
          end
          
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[lambda2, -7.5e-5], N[Not[LessEqual[lambda2, 1.3e-7]], $MachinePrecision]], N[(N[ArcCos[N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
          
          \begin{array}{l}
          [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
          \\
          \begin{array}{l}
          t_0 := \sin \phi_2 \cdot \sin \phi_1\\
          \mathbf{if}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
          
          \mathbf{else}:\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if lambda2 < -7.49999999999999934e-5 or 1.29999999999999999e-7 < lambda2

            1. Initial program 59.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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda1 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
              2. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              5. cos-negN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              8. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \color{blue}{\cos \phi_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              9. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              10. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              11. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
              12. lower-sin.f6459.3

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
            5. Applied rewrites59.3%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]

            if -7.49999999999999934e-5 < lambda2 < 1.29999999999999999e-7

            1. Initial program 90.5%

              \[\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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda2 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
              2. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              5. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2} \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \color{blue}{\cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \color{blue}{\cos \lambda_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              8. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              9. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              10. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
              11. lower-sin.f6490.5

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
            5. Applied rewrites90.5%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
          3. Recombined 2 regimes into one program.
          4. Final simplification75.3%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\lambda_2 \leq -7.5 \cdot 10^{-5} \lor \neg \left(\lambda_2 \leq 1.3 \cdot 10^{-7}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \end{array} \]
          5. Add Preprocessing

          Alternative 11: 63.6% accurate, 1.0× speedup?

          \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -2.1 \cdot 10^{-8} \lor \neg \left(\phi_2 \leq 3.1 \cdot 10^{-6}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\ \end{array} \end{array} \]
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          (FPCore (R lambda1 lambda2 phi1 phi2)
           :precision binary64
           (if (or (<= phi2 -2.1e-8) (not (<= phi2 3.1e-6)))
             (*
              (acos
               (fma (* (cos lambda2) (cos phi2)) (cos phi1) (* (sin phi2) (sin phi1))))
              R)
             (* (acos (* (cos (- lambda2 lambda1)) (cos phi1))) R)))
          assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
          	double tmp;
          	if ((phi2 <= -2.1e-8) || !(phi2 <= 3.1e-6)) {
          		tmp = acos(fma((cos(lambda2) * cos(phi2)), cos(phi1), (sin(phi2) * sin(phi1)))) * R;
          	} else {
          		tmp = acos((cos((lambda2 - lambda1)) * cos(phi1))) * R;
          	}
          	return tmp;
          }
          
          R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
          function code(R, lambda1, lambda2, phi1, phi2)
          	tmp = 0.0
          	if ((phi2 <= -2.1e-8) || !(phi2 <= 3.1e-6))
          		tmp = Float64(acos(fma(Float64(cos(lambda2) * cos(phi2)), cos(phi1), Float64(sin(phi2) * sin(phi1)))) * R);
          	else
          		tmp = Float64(acos(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))) * R);
          	end
          	return tmp
          end
          
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi2, -2.1e-8], N[Not[LessEqual[phi2, 3.1e-6]], $MachinePrecision]], N[(N[ArcCos[N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
          
          \begin{array}{l}
          [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
          \\
          \begin{array}{l}
          \mathbf{if}\;\phi_2 \leq -2.1 \cdot 10^{-8} \lor \neg \left(\phi_2 \leq 3.1 \cdot 10^{-6}\right):\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\
          
          \mathbf{else}:\\
          \;\;\;\;\cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if phi2 < -2.09999999999999994e-8 or 3.1e-6 < phi2

            1. Initial program 84.0%

              \[\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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda1 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
              2. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              5. cos-negN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              8. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \color{blue}{\cos \phi_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              9. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              10. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              11. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
              12. lower-sin.f6460.4

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
            5. Applied rewrites60.4%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]

            if -2.09999999999999994e-8 < phi2 < 3.1e-6

            1. Initial program 66.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 \]
            2. Add Preprocessing
            3. Taylor expanded in phi2 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
              2. lower-*.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
              3. *-lft-identityN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
              4. metadata-evalN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
              5. fp-cancel-sign-sub-invN/A

                \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
              6. cos-neg-revN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
              7. remove-double-negN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
              8. mul-1-negN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
              9. distribute-neg-inN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
              10. +-commutativeN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
              11. mul-1-negN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
              12. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
              13. remove-double-negN/A

                \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
              14. fp-cancel-sign-sub-invN/A

                \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
              15. metadata-evalN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
              16. *-lft-identityN/A

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
              17. lower--.f64N/A

                \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
              18. lower-cos.f6466.0

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
            5. Applied rewrites66.0%

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
          3. Recombined 2 regimes into one program.
          4. Final simplification63.1%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq -2.1 \cdot 10^{-8} \lor \neg \left(\phi_2 \leq 3.1 \cdot 10^{-6}\right):\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\ \end{array} \]
          5. Add Preprocessing

          Alternative 12: 73.7% accurate, 1.0× speedup?

          \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \sin \phi_2 \cdot \sin \phi_1\\ \mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-8}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 3.2 \cdot 10^{-8}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\ \end{array} \end{array} \]
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          (FPCore (R lambda1 lambda2 phi1 phi2)
           :precision binary64
           (let* ((t_0 (* (sin phi2) (sin phi1))))
             (if (<= phi1 -2.6e-8)
               (* (acos (fma (* (cos phi2) (cos phi1)) (cos lambda1) t_0)) R)
               (if (<= phi1 3.2e-8)
                 (*
                  (acos
                   (*
                    (fma (sin lambda2) (sin lambda1) (* (cos lambda2) (cos lambda1)))
                    (cos phi2)))
                  R)
                 (* (acos (fma (* (cos lambda2) (cos phi2)) (cos phi1) t_0)) R)))))
          assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
          	double t_0 = sin(phi2) * sin(phi1);
          	double tmp;
          	if (phi1 <= -2.6e-8) {
          		tmp = acos(fma((cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R;
          	} else if (phi1 <= 3.2e-8) {
          		tmp = acos((fma(sin(lambda2), sin(lambda1), (cos(lambda2) * cos(lambda1))) * cos(phi2))) * R;
          	} else {
          		tmp = acos(fma((cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R;
          	}
          	return tmp;
          }
          
          R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
          function code(R, lambda1, lambda2, phi1, phi2)
          	t_0 = Float64(sin(phi2) * sin(phi1))
          	tmp = 0.0
          	if (phi1 <= -2.6e-8)
          		tmp = Float64(acos(fma(Float64(cos(phi2) * cos(phi1)), cos(lambda1), t_0)) * R);
          	elseif (phi1 <= 3.2e-8)
          		tmp = Float64(acos(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda2) * cos(lambda1))) * cos(phi2))) * R);
          	else
          		tmp = Float64(acos(fma(Float64(cos(lambda2) * cos(phi2)), cos(phi1), t_0)) * R);
          	end
          	return tmp
          end
          
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -2.6e-8], N[(N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi1, 3.2e-8], N[(N[ArcCos[N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
          
          \begin{array}{l}
          [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
          \\
          \begin{array}{l}
          t_0 := \sin \phi_2 \cdot \sin \phi_1\\
          \mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-8}:\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, t\_0\right)\right) \cdot R\\
          
          \mathbf{elif}\;\phi_1 \leq 3.2 \cdot 10^{-8}:\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\
          
          \mathbf{else}:\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right) \cdot R\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 3 regimes
          2. if phi1 < -2.6000000000000001e-8

            1. Initial program 85.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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda2 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
              2. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              5. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \phi_2} \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \color{blue}{\cos \phi_1}, \cos \lambda_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \color{blue}{\cos \lambda_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              8. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              9. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              10. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
              11. lower-sin.f6467.5

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
            5. Applied rewrites67.5%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]

            if -2.6000000000000001e-8 < phi1 < 3.2000000000000002e-8

            1. Initial program 67.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 \]
            2. Add Preprocessing
            3. Step-by-step derivation
              1. lift-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
              2. lift--.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
              3. cos-diffN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R \]
              4. +-commutativeN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
              5. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
              6. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
              7. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
              8. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot R \]
              9. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
              10. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right)\right) \cdot R \]
              11. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right)\right) \cdot R \]
              12. lower-cos.f6489.5

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right)\right) \cdot R \]
            4. Applied rewrites89.5%

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)}\right) \cdot R \]
            5. Taylor expanded in phi1 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)} \cdot R \]
            6. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
              2. lower-*.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
              3. +-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
              4. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
              5. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
              6. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \lambda_2}, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
              7. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \color{blue}{\sin \lambda_1}, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
              8. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
              9. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2 \cdot \cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
              10. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \color{blue}{\cos \lambda_2} \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
              11. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \color{blue}{\cos \lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
              12. lower-cos.f6489.3

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
            7. Applied rewrites89.3%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]

            if 3.2000000000000002e-8 < phi1

            1. Initial program 78.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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda1 around 0

              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R \]
              2. lower-fma.f64N/A

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right), \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              5. cos-negN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_2}, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              8. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \color{blue}{\cos \phi_1}, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
              9. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              10. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R \]
              11. lower-sin.f64N/A

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right)\right) \cdot R \]
              12. lower-sin.f6462.4

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right)\right) \cdot R \]
            5. Applied rewrites62.4%

              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
          3. Recombined 3 regimes into one program.
          4. Add Preprocessing

          Alternative 13: 59.8% accurate, 1.2× speedup?

          \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ \mathbf{if}\;\phi_2 \leq -0.00175:\\ \;\;\;\;\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 2.05 \cdot 10^{-7}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, t\_0 \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\ \end{array} \end{array} \]
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          (FPCore (R lambda1 lambda2 phi1 phi2)
           :precision binary64
           (let* ((t_0 (cos (- lambda2 lambda1))))
             (if (<= phi2 -0.00175)
               (* (acos (+ (* (sin phi1) (sin phi2)) (* (cos phi2) (cos phi1)))) R)
               (if (<= phi2 2.05e-7)
                 (* (acos (fma (sin phi1) phi2 (* t_0 (cos phi1)))) R)
                 (* (acos (* t_0 (cos phi2))) R)))))
          assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
          	double t_0 = cos((lambda2 - lambda1));
          	double tmp;
          	if (phi2 <= -0.00175) {
          		tmp = acos(((sin(phi1) * sin(phi2)) + (cos(phi2) * cos(phi1)))) * R;
          	} else if (phi2 <= 2.05e-7) {
          		tmp = acos(fma(sin(phi1), phi2, (t_0 * cos(phi1)))) * R;
          	} else {
          		tmp = acos((t_0 * cos(phi2))) * R;
          	}
          	return tmp;
          }
          
          R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
          function code(R, lambda1, lambda2, phi1, phi2)
          	t_0 = cos(Float64(lambda2 - lambda1))
          	tmp = 0.0
          	if (phi2 <= -0.00175)
          		tmp = Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(phi2) * cos(phi1)))) * R);
          	elseif (phi2 <= 2.05e-7)
          		tmp = Float64(acos(fma(sin(phi1), phi2, Float64(t_0 * cos(phi1)))) * R);
          	else
          		tmp = Float64(acos(Float64(t_0 * cos(phi2))) * R);
          	end
          	return tmp
          end
          
          NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
          code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, -0.00175], N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi2, 2.05e-7], N[(N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * phi2 + N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]]
          
          \begin{array}{l}
          [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
          \\
          \begin{array}{l}
          t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
          \mathbf{if}\;\phi_2 \leq -0.00175:\\
          \;\;\;\;\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \phi_1\right) \cdot R\\
          
          \mathbf{elif}\;\phi_2 \leq 2.05 \cdot 10^{-7}:\\
          \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, t\_0 \cdot \cos \phi_1\right)\right) \cdot R\\
          
          \mathbf{else}:\\
          \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 3 regimes
          2. if phi2 < -0.00175000000000000004

            1. Initial program 87.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 \]
            2. Add Preprocessing
            3. Taylor expanded in lambda1 around 0

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right)}\right) \cdot R \]
            4. Step-by-step derivation
              1. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1}\right) \cdot R \]
              2. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\cos \phi_2 \cdot \cos \left(\mathsf{neg}\left(\lambda_2\right)\right)\right) \cdot \cos \phi_1}\right) \cdot R \]
              3. *-commutativeN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2\right)} \cdot \cos \phi_1\right) \cdot R \]
              4. lower-*.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_2\right)} \cdot \cos \phi_1\right) \cdot R \]
              5. cos-negN/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2\right) \cdot \cos \phi_1\right) \cdot R \]
              6. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\cos \lambda_2} \cdot \cos \phi_2\right) \cdot \cos \phi_1\right) \cdot R \]
              7. lower-cos.f64N/A

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_2}\right) \cdot \cos \phi_1\right) \cdot R \]
              8. lower-cos.f6461.5

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \lambda_2 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
            5. Applied rewrites61.5%

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\cos \lambda_2 \cdot \cos \phi_2\right) \cdot \cos \phi_1}\right) \cdot R \]
            6. Taylor expanded in lambda2 around 0

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]
            7. Step-by-step derivation
              1. Applied rewrites46.3%

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]

              if -0.00175000000000000004 < phi2 < 2.05e-7

              1. Initial program 66.6%

                \[\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 \]
              2. Add Preprocessing
              3. Taylor expanded in phi2 around 0

                \[\leadsto \cos^{-1} \color{blue}{\left(\phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
              4. Step-by-step derivation
                1. *-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_1 \cdot \phi_2} + \cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                2. lower-fma.f64N/A

                  \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
                3. lower-sin.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \phi_1}, \phi_2, \cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                4. *-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1}\right)\right) \cdot R \]
                5. lower-*.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1}\right)\right) \cdot R \]
                6. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                7. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                8. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                9. cos-neg-revN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                10. remove-double-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                11. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                12. distribute-neg-inN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                13. +-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                14. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                15. lower-cos.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                16. remove-double-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                17. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                18. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                19. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                20. lower--.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right)\right) \cdot R \]
                21. lower-cos.f6466.5

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right)\right) \cdot R \]
              5. Applied rewrites66.5%

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_1, \phi_2, \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)\right)} \cdot R \]

              if 2.05e-7 < phi2

              1. Initial program 80.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 \]
              2. Add Preprocessing
              3. Taylor expanded in phi1 around 0

                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
              4. Step-by-step derivation
                1. *-commutativeN/A

                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
                2. lower-*.f64N/A

                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
                3. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right) \cdot R \]
                4. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
                5. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
                6. cos-neg-revN/A

                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                7. remove-double-negN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                8. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                9. distribute-neg-inN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                10. +-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                11. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                12. lower-cos.f64N/A

                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                13. remove-double-negN/A

                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                14. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                15. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
                16. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
                17. lower--.f64N/A

                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                18. lower-cos.f6450.3

                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
              5. Applied rewrites50.3%

                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]
            8. Recombined 3 regimes into one program.
            9. Add Preprocessing

            Alternative 14: 32.8% accurate, 1.9× speedup?

            \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\cos \left(\lambda_1 - \lambda_2\right) \leq 0.999999998:\\ \;\;\;\;\cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\lambda_2, \lambda_1, 1\right) \cdot \cos \phi_1\right) \cdot R\\ \end{array} \end{array} \]
            NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
            (FPCore (R lambda1 lambda2 phi1 phi2)
             :precision binary64
             (if (<= (cos (- lambda1 lambda2)) 0.999999998)
               (* (acos (cos (- lambda2 lambda1))) R)
               (* (acos (* (fma lambda2 lambda1 1.0) (cos phi1))) R)))
            assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
            	double tmp;
            	if (cos((lambda1 - lambda2)) <= 0.999999998) {
            		tmp = acos(cos((lambda2 - lambda1))) * R;
            	} else {
            		tmp = acos((fma(lambda2, lambda1, 1.0) * cos(phi1))) * R;
            	}
            	return tmp;
            }
            
            R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
            function code(R, lambda1, lambda2, phi1, phi2)
            	tmp = 0.0
            	if (cos(Float64(lambda1 - lambda2)) <= 0.999999998)
            		tmp = Float64(acos(cos(Float64(lambda2 - lambda1))) * R);
            	else
            		tmp = Float64(acos(Float64(fma(lambda2, lambda1, 1.0) * cos(phi1))) * R);
            	end
            	return tmp
            end
            
            NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision], 0.999999998], N[(N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(lambda2 * lambda1 + 1.0), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
            
            \begin{array}{l}
            [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
            \\
            \begin{array}{l}
            \mathbf{if}\;\cos \left(\lambda_1 - \lambda_2\right) \leq 0.999999998:\\
            \;\;\;\;\cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R\\
            
            \mathbf{else}:\\
            \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\lambda_2, \lambda_1, 1\right) \cdot \cos \phi_1\right) \cdot R\\
            
            
            \end{array}
            \end{array}
            
            Derivation
            1. Split input into 2 regimes
            2. if (cos.f64 (-.f64 lambda1 lambda2)) < 0.999999997999999946

              1. Initial program 72.6%

                \[\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 \]
              2. Add Preprocessing
              3. Step-by-step derivation
                1. lift-cos.f64N/A

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                2. sin-+PI/2-revN/A

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\sin \left(\left(\lambda_1 - \lambda_2\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
                3. sin-sumN/A

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                4. flip-+N/A

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                5. lower-/.f64N/A

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
              4. Applied rewrites72.6%

                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) - \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right) \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot 0 - \cos \left(\lambda_2 - \lambda_1\right) \cdot 1}}\right) \cdot R \]
              5. Taylor expanded in phi2 around 0

                \[\leadsto \cos^{-1} \color{blue}{\left(\phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)} \cdot R \]
              6. Step-by-step derivation
                1. +-commutativeN/A

                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_2 \cdot \sin \phi_1\right)} \cdot R \]
                2. *-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1} + \phi_2 \cdot \sin \phi_1\right) \cdot R \]
                3. lower-fma.f64N/A

                  \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
                4. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{1 \cdot \lambda_1}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                5. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                6. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                7. remove-double-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right)} + -1 \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                8. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_1\right)\right)}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                9. distribute-neg-inN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_2\right)\right) + \lambda_1\right)\right)\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                10. +-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\lambda_1 + \left(\mathsf{neg}\left(\lambda_2\right)\right)\right)}\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                11. mul-1-negN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right)\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                12. cos-neg-revN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                13. lower-cos.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                14. fp-cancel-sign-sub-invN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                15. metadata-evalN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{1} \cdot \lambda_2\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                16. *-lft-identityN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{\lambda_2}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                17. lower--.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                18. lower-cos.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \color{blue}{\cos \phi_1}, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                19. *-commutativeN/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                20. lower-*.f64N/A

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                21. lower-sin.f6435.9

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1} \cdot \phi_2\right)\right) \cdot R \]
              7. Applied rewrites35.9%

                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)} \cdot R \]
              8. Taylor expanded in phi1 around 0

                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) + \color{blue}{\phi_1 \cdot \phi_2}\right) \cdot R \]
              9. Step-by-step derivation
                1. Applied rewrites22.1%

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \color{blue}{\phi_1}, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                2. Taylor expanded in phi1 around 0

                  \[\leadsto \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R \]
                3. Step-by-step derivation
                  1. Applied rewrites32.0%

                    \[\leadsto \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R \]

                  if 0.999999997999999946 < (cos.f64 (-.f64 lambda1 lambda2))

                  1. Initial program 83.0%

                    \[\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 \]
                  2. Add Preprocessing
                  3. Taylor expanded in phi2 around 0

                    \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                  4. Step-by-step derivation
                    1. *-commutativeN/A

                      \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                    2. lower-*.f64N/A

                      \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                    3. *-lft-identityN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                    4. metadata-evalN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                    5. fp-cancel-sign-sub-invN/A

                      \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                    6. cos-neg-revN/A

                      \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                    7. remove-double-negN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                    8. mul-1-negN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                    9. distribute-neg-inN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                    10. +-commutativeN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                    11. mul-1-negN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                    12. lower-cos.f64N/A

                      \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                    13. remove-double-negN/A

                      \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                    14. fp-cancel-sign-sub-invN/A

                      \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                    15. metadata-evalN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                    16. *-lft-identityN/A

                      \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                    17. lower--.f64N/A

                      \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                    18. lower-cos.f6438.5

                      \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                  5. Applied rewrites38.5%

                    \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                  6. Taylor expanded in lambda2 around 0

                    \[\leadsto \cos^{-1} \left(\left(\cos \left(\mathsf{neg}\left(\lambda_1\right)\right) + -1 \cdot \left(\lambda_2 \cdot \sin \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]
                  7. Step-by-step derivation
                    1. Applied rewrites38.5%

                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_1, \lambda_2, \cos \lambda_1\right) \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]
                    2. Taylor expanded in lambda1 around 0

                      \[\leadsto \cos^{-1} \left(\left(1 + \lambda_1 \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                    3. Step-by-step derivation
                      1. Applied rewrites38.5%

                        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\lambda_2, \lambda_1, 1\right) \cdot \cos \phi_1\right) \cdot R \]
                    4. Recombined 2 regimes into one program.
                    5. Add Preprocessing

                    Alternative 15: 42.8% accurate, 1.9× speedup?

                    \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\lambda_1 \leq -0.0085 \lor \neg \left(\lambda_1 \leq 7.2 \cdot 10^{-6}\right):\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\ \end{array} \end{array} \]
                    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                    (FPCore (R lambda1 lambda2 phi1 phi2)
                     :precision binary64
                     (if (or (<= lambda1 -0.0085) (not (<= lambda1 7.2e-6)))
                       (* (acos (* (cos lambda1) (cos phi1))) R)
                       (* (acos (* (cos lambda2) (cos phi1))) R)))
                    assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                    	double tmp;
                    	if ((lambda1 <= -0.0085) || !(lambda1 <= 7.2e-6)) {
                    		tmp = acos((cos(lambda1) * cos(phi1))) * R;
                    	} else {
                    		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                    	}
                    	return tmp;
                    }
                    
                    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                    real(8) function code(r, lambda1, lambda2, phi1, phi2)
                        real(8), intent (in) :: r
                        real(8), intent (in) :: lambda1
                        real(8), intent (in) :: lambda2
                        real(8), intent (in) :: phi1
                        real(8), intent (in) :: phi2
                        real(8) :: tmp
                        if ((lambda1 <= (-0.0085d0)) .or. (.not. (lambda1 <= 7.2d-6))) then
                            tmp = acos((cos(lambda1) * cos(phi1))) * r
                        else
                            tmp = acos((cos(lambda2) * cos(phi1))) * r
                        end if
                        code = tmp
                    end function
                    
                    assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                    public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                    	double tmp;
                    	if ((lambda1 <= -0.0085) || !(lambda1 <= 7.2e-6)) {
                    		tmp = Math.acos((Math.cos(lambda1) * Math.cos(phi1))) * R;
                    	} else {
                    		tmp = Math.acos((Math.cos(lambda2) * Math.cos(phi1))) * R;
                    	}
                    	return tmp;
                    }
                    
                    [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                    def code(R, lambda1, lambda2, phi1, phi2):
                    	tmp = 0
                    	if (lambda1 <= -0.0085) or not (lambda1 <= 7.2e-6):
                    		tmp = math.acos((math.cos(lambda1) * math.cos(phi1))) * R
                    	else:
                    		tmp = math.acos((math.cos(lambda2) * math.cos(phi1))) * R
                    	return tmp
                    
                    R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                    function code(R, lambda1, lambda2, phi1, phi2)
                    	tmp = 0.0
                    	if ((lambda1 <= -0.0085) || !(lambda1 <= 7.2e-6))
                    		tmp = Float64(acos(Float64(cos(lambda1) * cos(phi1))) * R);
                    	else
                    		tmp = Float64(acos(Float64(cos(lambda2) * cos(phi1))) * R);
                    	end
                    	return tmp
                    end
                    
                    R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                    function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                    	tmp = 0.0;
                    	if ((lambda1 <= -0.0085) || ~((lambda1 <= 7.2e-6)))
                    		tmp = acos((cos(lambda1) * cos(phi1))) * R;
                    	else
                    		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                    	end
                    	tmp_2 = tmp;
                    end
                    
                    NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                    code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[lambda1, -0.0085], N[Not[LessEqual[lambda1, 7.2e-6]], $MachinePrecision]], N[(N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
                    
                    \begin{array}{l}
                    [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                    \\
                    \begin{array}{l}
                    \mathbf{if}\;\lambda_1 \leq -0.0085 \lor \neg \left(\lambda_1 \leq 7.2 \cdot 10^{-6}\right):\\
                    \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\
                    
                    
                    \end{array}
                    \end{array}
                    
                    Derivation
                    1. Split input into 2 regimes
                    2. if lambda1 < -0.0085000000000000006 or 7.19999999999999967e-6 < lambda1

                      1. Initial program 60.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 \]
                      2. Add Preprocessing
                      3. Taylor expanded in phi2 around 0

                        \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                      4. Step-by-step derivation
                        1. *-commutativeN/A

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                        2. lower-*.f64N/A

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                        3. *-lft-identityN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                        4. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                        5. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                        6. cos-neg-revN/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                        7. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        8. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        9. distribute-neg-inN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        10. +-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        11. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        12. lower-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                        13. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        14. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        15. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                        16. *-lft-identityN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                        17. lower--.f64N/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        18. lower-cos.f6435.5

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                      5. Applied rewrites35.5%

                        \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                      6. Taylor expanded in lambda2 around 0

                        \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\lambda_1\right)\right) \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]
                      7. Step-by-step derivation
                        1. Applied rewrites35.5%

                          \[\leadsto \cos^{-1} \left(\cos \lambda_1 \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]

                        if -0.0085000000000000006 < lambda1 < 7.19999999999999967e-6

                        1. Initial program 89.6%

                          \[\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 \]
                        2. Add Preprocessing
                        3. Taylor expanded in phi2 around 0

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                        4. Step-by-step derivation
                          1. *-commutativeN/A

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                          2. lower-*.f64N/A

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                          3. *-lft-identityN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                          4. metadata-evalN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                          5. fp-cancel-sign-sub-invN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                          6. cos-neg-revN/A

                            \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                          7. remove-double-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          8. mul-1-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          9. distribute-neg-inN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          10. +-commutativeN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          11. mul-1-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          12. lower-cos.f64N/A

                            \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                          13. remove-double-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          14. fp-cancel-sign-sub-invN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          15. metadata-evalN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                          16. *-lft-identityN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                          17. lower--.f64N/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          18. lower-cos.f6448.3

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                        5. Applied rewrites48.3%

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                        6. Taylor expanded in lambda1 around 0

                          \[\leadsto \cos^{-1} \left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                        7. Step-by-step derivation
                          1. Applied rewrites48.3%

                            \[\leadsto \cos^{-1} \left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                        8. Recombined 2 regimes into one program.
                        9. Final simplification42.1%

                          \[\leadsto \begin{array}{l} \mathbf{if}\;\lambda_1 \leq -0.0085 \lor \neg \left(\lambda_1 \leq 7.2 \cdot 10^{-6}\right):\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\ \end{array} \]
                        10. Add Preprocessing

                        Alternative 16: 57.1% accurate, 2.0× speedup?

                        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ \mathbf{if}\;\phi_1 \leq -1.75 \cdot 10^{+16}:\\ \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\ \end{array} \end{array} \]
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        (FPCore (R lambda1 lambda2 phi1 phi2)
                         :precision binary64
                         (let* ((t_0 (cos (- lambda2 lambda1))))
                           (if (<= phi1 -1.75e+16)
                             (* (acos (* t_0 (cos phi1))) R)
                             (* (acos (* t_0 (cos phi2))) R))))
                        assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                        	double t_0 = cos((lambda2 - lambda1));
                        	double tmp;
                        	if (phi1 <= -1.75e+16) {
                        		tmp = acos((t_0 * cos(phi1))) * R;
                        	} else {
                        		tmp = acos((t_0 * cos(phi2))) * R;
                        	}
                        	return tmp;
                        }
                        
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        real(8) function code(r, lambda1, lambda2, phi1, phi2)
                            real(8), intent (in) :: r
                            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((lambda2 - lambda1))
                            if (phi1 <= (-1.75d+16)) then
                                tmp = acos((t_0 * cos(phi1))) * r
                            else
                                tmp = acos((t_0 * cos(phi2))) * r
                            end if
                            code = tmp
                        end function
                        
                        assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                        public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                        	double t_0 = Math.cos((lambda2 - lambda1));
                        	double tmp;
                        	if (phi1 <= -1.75e+16) {
                        		tmp = Math.acos((t_0 * Math.cos(phi1))) * R;
                        	} else {
                        		tmp = Math.acos((t_0 * Math.cos(phi2))) * R;
                        	}
                        	return tmp;
                        }
                        
                        [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                        def code(R, lambda1, lambda2, phi1, phi2):
                        	t_0 = math.cos((lambda2 - lambda1))
                        	tmp = 0
                        	if phi1 <= -1.75e+16:
                        		tmp = math.acos((t_0 * math.cos(phi1))) * R
                        	else:
                        		tmp = math.acos((t_0 * math.cos(phi2))) * R
                        	return tmp
                        
                        R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                        function code(R, lambda1, lambda2, phi1, phi2)
                        	t_0 = cos(Float64(lambda2 - lambda1))
                        	tmp = 0.0
                        	if (phi1 <= -1.75e+16)
                        		tmp = Float64(acos(Float64(t_0 * cos(phi1))) * R);
                        	else
                        		tmp = Float64(acos(Float64(t_0 * cos(phi2))) * R);
                        	end
                        	return tmp
                        end
                        
                        R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                        function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                        	t_0 = cos((lambda2 - lambda1));
                        	tmp = 0.0;
                        	if (phi1 <= -1.75e+16)
                        		tmp = acos((t_0 * cos(phi1))) * R;
                        	else
                        		tmp = acos((t_0 * cos(phi2))) * R;
                        	end
                        	tmp_2 = tmp;
                        end
                        
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -1.75e+16], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
                        
                        \begin{array}{l}
                        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                        \\
                        \begin{array}{l}
                        t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
                        \mathbf{if}\;\phi_1 \leq -1.75 \cdot 10^{+16}:\\
                        \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\
                        
                        \mathbf{else}:\\
                        \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\
                        
                        
                        \end{array}
                        \end{array}
                        
                        Derivation
                        1. Split input into 2 regimes
                        2. if phi1 < -1.75e16

                          1. Initial program 84.7%

                            \[\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 \]
                          2. Add Preprocessing
                          3. Taylor expanded in phi2 around 0

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                          4. Step-by-step derivation
                            1. *-commutativeN/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            2. lower-*.f64N/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            3. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                            4. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                            5. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                            6. cos-neg-revN/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            7. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            8. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            9. distribute-neg-inN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            10. +-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            11. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            12. lower-cos.f64N/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            13. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            14. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            15. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                            16. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                            17. lower--.f64N/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            18. lower-cos.f6452.6

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                          5. Applied rewrites52.6%

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]

                          if -1.75e16 < phi1

                          1. Initial program 71.7%

                            \[\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 \]
                          2. Add Preprocessing
                          3. Taylor expanded in phi1 around 0

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                          4. Step-by-step derivation
                            1. *-commutativeN/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
                            2. lower-*.f64N/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)} \cdot R \]
                            3. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right) \cdot R \]
                            4. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
                            5. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
                            6. cos-neg-revN/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                            7. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                            8. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                            9. distribute-neg-inN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                            10. +-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                            11. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                            12. lower-cos.f64N/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                            13. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                            14. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                            15. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
                            16. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
                            17. lower--.f64N/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                            18. lower-cos.f6449.5

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
                          5. Applied rewrites49.5%

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]
                        3. Recombined 2 regimes into one program.
                        4. Add Preprocessing

                        Alternative 17: 37.6% accurate, 2.0× speedup?

                        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.002:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R\\ \end{array} \end{array} \]
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        (FPCore (R lambda1 lambda2 phi1 phi2)
                         :precision binary64
                         (if (<= phi1 -0.002)
                           (* (acos (* (cos lambda2) (cos phi1))) R)
                           (* (acos (cos (- lambda2 lambda1))) R)))
                        assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                        	double tmp;
                        	if (phi1 <= -0.002) {
                        		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                        	} else {
                        		tmp = acos(cos((lambda2 - lambda1))) * R;
                        	}
                        	return tmp;
                        }
                        
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        real(8) function code(r, lambda1, lambda2, phi1, phi2)
                            real(8), intent (in) :: r
                            real(8), intent (in) :: lambda1
                            real(8), intent (in) :: lambda2
                            real(8), intent (in) :: phi1
                            real(8), intent (in) :: phi2
                            real(8) :: tmp
                            if (phi1 <= (-0.002d0)) then
                                tmp = acos((cos(lambda2) * cos(phi1))) * r
                            else
                                tmp = acos(cos((lambda2 - lambda1))) * r
                            end if
                            code = tmp
                        end function
                        
                        assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                        public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                        	double tmp;
                        	if (phi1 <= -0.002) {
                        		tmp = Math.acos((Math.cos(lambda2) * Math.cos(phi1))) * R;
                        	} else {
                        		tmp = Math.acos(Math.cos((lambda2 - lambda1))) * R;
                        	}
                        	return tmp;
                        }
                        
                        [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                        def code(R, lambda1, lambda2, phi1, phi2):
                        	tmp = 0
                        	if phi1 <= -0.002:
                        		tmp = math.acos((math.cos(lambda2) * math.cos(phi1))) * R
                        	else:
                        		tmp = math.acos(math.cos((lambda2 - lambda1))) * R
                        	return tmp
                        
                        R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                        function code(R, lambda1, lambda2, phi1, phi2)
                        	tmp = 0.0
                        	if (phi1 <= -0.002)
                        		tmp = Float64(acos(Float64(cos(lambda2) * cos(phi1))) * R);
                        	else
                        		tmp = Float64(acos(cos(Float64(lambda2 - lambda1))) * R);
                        	end
                        	return tmp
                        end
                        
                        R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                        function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                        	tmp = 0.0;
                        	if (phi1 <= -0.002)
                        		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                        	else
                        		tmp = acos(cos((lambda2 - lambda1))) * R;
                        	end
                        	tmp_2 = tmp;
                        end
                        
                        NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                        code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -0.002], N[(N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
                        
                        \begin{array}{l}
                        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                        \\
                        \begin{array}{l}
                        \mathbf{if}\;\phi_1 \leq -0.002:\\
                        \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\
                        
                        \mathbf{else}:\\
                        \;\;\;\;\cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R\\
                        
                        
                        \end{array}
                        \end{array}
                        
                        Derivation
                        1. Split input into 2 regimes
                        2. if phi1 < -2e-3

                          1. Initial program 85.1%

                            \[\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 \]
                          2. Add Preprocessing
                          3. Taylor expanded in phi2 around 0

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                          4. Step-by-step derivation
                            1. *-commutativeN/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            2. lower-*.f64N/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            3. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                            4. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                            5. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                            6. cos-neg-revN/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            7. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            8. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            9. distribute-neg-inN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            10. +-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            11. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            12. lower-cos.f64N/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            13. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            14. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            15. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                            16. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                            17. lower--.f64N/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            18. lower-cos.f6451.7

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                          5. Applied rewrites51.7%

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                          6. Taylor expanded in lambda1 around 0

                            \[\leadsto \cos^{-1} \left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                          7. Step-by-step derivation
                            1. Applied rewrites40.1%

                              \[\leadsto \cos^{-1} \left(\cos \lambda_2 \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]

                            if -2e-3 < phi1

                            1. Initial program 71.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 \]
                            2. Add Preprocessing
                            3. Step-by-step derivation
                              1. lift-cos.f64N/A

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                              2. sin-+PI/2-revN/A

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\sin \left(\left(\lambda_1 - \lambda_2\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
                              3. sin-sumN/A

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                              4. flip-+N/A

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                              5. lower-/.f64N/A

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                            4. Applied rewrites71.4%

                              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) - \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right) \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot 0 - \cos \left(\lambda_2 - \lambda_1\right) \cdot 1}}\right) \cdot R \]
                            5. Taylor expanded in phi2 around 0

                              \[\leadsto \cos^{-1} \color{blue}{\left(\phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)} \cdot R \]
                            6. Step-by-step derivation
                              1. +-commutativeN/A

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_2 \cdot \sin \phi_1\right)} \cdot R \]
                              2. *-commutativeN/A

                                \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1} + \phi_2 \cdot \sin \phi_1\right) \cdot R \]
                              3. lower-fma.f64N/A

                                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
                              4. *-lft-identityN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{1 \cdot \lambda_1}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              5. metadata-evalN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              6. fp-cancel-sign-sub-invN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              7. remove-double-negN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right)} + -1 \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              8. mul-1-negN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_1\right)\right)}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              9. distribute-neg-inN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_2\right)\right) + \lambda_1\right)\right)\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              10. +-commutativeN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\lambda_1 + \left(\mathsf{neg}\left(\lambda_2\right)\right)\right)}\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              11. mul-1-negN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right)\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              12. cos-neg-revN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              13. lower-cos.f64N/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              14. fp-cancel-sign-sub-invN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              15. metadata-evalN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{1} \cdot \lambda_2\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              16. *-lft-identityN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{\lambda_2}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              17. lower--.f64N/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              18. lower-cos.f64N/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \color{blue}{\cos \phi_1}, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                              19. *-commutativeN/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                              20. lower-*.f64N/A

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                              21. lower-sin.f6432.2

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1} \cdot \phi_2\right)\right) \cdot R \]
                            7. Applied rewrites32.2%

                              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)} \cdot R \]
                            8. Taylor expanded in phi1 around 0

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) + \color{blue}{\phi_1 \cdot \phi_2}\right) \cdot R \]
                            9. Step-by-step derivation
                              1. Applied rewrites21.7%

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \color{blue}{\phi_1}, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0

                                \[\leadsto \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R \]
                              3. Step-by-step derivation
                                1. Applied rewrites28.1%

                                  \[\leadsto \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R \]
                              4. Recombined 2 regimes into one program.
                              5. Add Preprocessing

                              Alternative 18: 42.9% accurate, 2.0× speedup?

                              \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \end{array} \]
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              (FPCore (R lambda1 lambda2 phi1 phi2)
                               :precision binary64
                               (* (acos (* (cos (- lambda2 lambda1)) (cos phi1))) R))
                              assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                              double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                              	return acos((cos((lambda2 - lambda1)) * cos(phi1))) * R;
                              }
                              
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                  real(8), intent (in) :: r
                                  real(8), intent (in) :: lambda1
                                  real(8), intent (in) :: lambda2
                                  real(8), intent (in) :: phi1
                                  real(8), intent (in) :: phi2
                                  code = acos((cos((lambda2 - lambda1)) * cos(phi1))) * r
                              end function
                              
                              assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                              public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                              	return Math.acos((Math.cos((lambda2 - lambda1)) * Math.cos(phi1))) * R;
                              }
                              
                              [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                              def code(R, lambda1, lambda2, phi1, phi2):
                              	return math.acos((math.cos((lambda2 - lambda1)) * math.cos(phi1))) * R
                              
                              R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                              function code(R, lambda1, lambda2, phi1, phi2)
                              	return Float64(acos(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))) * R)
                              end
                              
                              R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                              function tmp = code(R, lambda1, lambda2, phi1, phi2)
                              	tmp = acos((cos((lambda2 - lambda1)) * cos(phi1))) * R;
                              end
                              
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
                              
                              \begin{array}{l}
                              [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                              \\
                              \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R
                              \end{array}
                              
                              Derivation
                              1. Initial program 75.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 \]
                              2. Add Preprocessing
                              3. Taylor expanded in phi2 around 0

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                              4. Step-by-step derivation
                                1. *-commutativeN/A

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                                2. lower-*.f64N/A

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                                3. *-lft-identityN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                                4. metadata-evalN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                                5. fp-cancel-sign-sub-invN/A

                                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                                6. cos-neg-revN/A

                                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                                7. remove-double-negN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                                8. mul-1-negN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                                9. distribute-neg-inN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                                10. +-commutativeN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                                11. mul-1-negN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                                12. lower-cos.f64N/A

                                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                                13. remove-double-negN/A

                                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                                14. fp-cancel-sign-sub-invN/A

                                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                                15. metadata-evalN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                                16. *-lft-identityN/A

                                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                                17. lower--.f64N/A

                                  \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                                18. lower-cos.f6442.1

                                  \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                              5. Applied rewrites42.1%

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                              6. Add Preprocessing

                              Alternative 19: 26.3% accurate, 3.0× speedup?

                              \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R \end{array} \]
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              (FPCore (R lambda1 lambda2 phi1 phi2)
                               :precision binary64
                               (* (acos (cos (- lambda2 lambda1))) R))
                              assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                              double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                              	return acos(cos((lambda2 - lambda1))) * R;
                              }
                              
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                  real(8), intent (in) :: r
                                  real(8), intent (in) :: lambda1
                                  real(8), intent (in) :: lambda2
                                  real(8), intent (in) :: phi1
                                  real(8), intent (in) :: phi2
                                  code = acos(cos((lambda2 - lambda1))) * r
                              end function
                              
                              assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                              public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                              	return Math.acos(Math.cos((lambda2 - lambda1))) * R;
                              }
                              
                              [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                              def code(R, lambda1, lambda2, phi1, phi2):
                              	return math.acos(math.cos((lambda2 - lambda1))) * R
                              
                              R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                              function code(R, lambda1, lambda2, phi1, phi2)
                              	return Float64(acos(cos(Float64(lambda2 - lambda1))) * R)
                              end
                              
                              R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                              function tmp = code(R, lambda1, lambda2, phi1, phi2)
                              	tmp = acos(cos((lambda2 - lambda1))) * R;
                              end
                              
                              NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                              code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
                              
                              \begin{array}{l}
                              [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                              \\
                              \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R
                              \end{array}
                              
                              Derivation
                              1. Initial program 75.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 \]
                              2. Add Preprocessing
                              3. Step-by-step derivation
                                1. lift-cos.f64N/A

                                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                                2. sin-+PI/2-revN/A

                                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\sin \left(\left(\lambda_1 - \lambda_2\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
                                3. sin-sumN/A

                                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                                4. flip-+N/A

                                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                                5. lower-/.f64N/A

                                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                              4. Applied rewrites75.3%

                                \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) - \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right) \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot 0 - \cos \left(\lambda_2 - \lambda_1\right) \cdot 1}}\right) \cdot R \]
                              5. Taylor expanded in phi2 around 0

                                \[\leadsto \cos^{-1} \color{blue}{\left(\phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)} \cdot R \]
                              6. Step-by-step derivation
                                1. +-commutativeN/A

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_2 \cdot \sin \phi_1\right)} \cdot R \]
                                2. *-commutativeN/A

                                  \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1} + \phi_2 \cdot \sin \phi_1\right) \cdot R \]
                                3. lower-fma.f64N/A

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
                                4. *-lft-identityN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{1 \cdot \lambda_1}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                5. metadata-evalN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                6. fp-cancel-sign-sub-invN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                7. remove-double-negN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right)} + -1 \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                8. mul-1-negN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_1\right)\right)}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                9. distribute-neg-inN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_2\right)\right) + \lambda_1\right)\right)\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                10. +-commutativeN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\lambda_1 + \left(\mathsf{neg}\left(\lambda_2\right)\right)\right)}\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                11. mul-1-negN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right)\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                12. cos-neg-revN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                13. lower-cos.f64N/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                14. fp-cancel-sign-sub-invN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                15. metadata-evalN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{1} \cdot \lambda_2\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                16. *-lft-identityN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{\lambda_2}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                17. lower--.f64N/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                18. lower-cos.f64N/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \color{blue}{\cos \phi_1}, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                19. *-commutativeN/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                                20. lower-*.f64N/A

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                                21. lower-sin.f6435.1

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1} \cdot \phi_2\right)\right) \cdot R \]
                              7. Applied rewrites35.1%

                                \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)} \cdot R \]
                              8. Taylor expanded in phi1 around 0

                                \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) + \color{blue}{\phi_1 \cdot \phi_2}\right) \cdot R \]
                              9. Step-by-step derivation
                                1. Applied rewrites16.7%

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \color{blue}{\phi_1}, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                2. Taylor expanded in phi1 around 0

                                  \[\leadsto \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right) \cdot R \]
                                3. Step-by-step derivation
                                  1. Applied rewrites24.4%

                                    \[\leadsto \cos^{-1} \cos \left(\lambda_2 - \lambda_1\right) \cdot R \]
                                  2. Add Preprocessing

                                  Alternative 20: 9.8% accurate, 5.6× speedup?

                                  \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\phi_1 \cdot \phi_2\right) \cdot R \end{array} \]
                                  NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                                  (FPCore (R lambda1 lambda2 phi1 phi2)
                                   :precision binary64
                                   (* (acos (* phi1 phi2)) R))
                                  assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
                                  double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                                  	return acos((phi1 * phi2)) * R;
                                  }
                                  
                                  NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                                  real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                      real(8), intent (in) :: r
                                      real(8), intent (in) :: lambda1
                                      real(8), intent (in) :: lambda2
                                      real(8), intent (in) :: phi1
                                      real(8), intent (in) :: phi2
                                      code = acos((phi1 * phi2)) * r
                                  end function
                                  
                                  assert R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
                                  public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                                  	return Math.acos((phi1 * phi2)) * R;
                                  }
                                  
                                  [R, lambda1, lambda2, phi1, phi2] = sort([R, lambda1, lambda2, phi1, phi2])
                                  def code(R, lambda1, lambda2, phi1, phi2):
                                  	return math.acos((phi1 * phi2)) * R
                                  
                                  R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                                  function code(R, lambda1, lambda2, phi1, phi2)
                                  	return Float64(acos(Float64(phi1 * phi2)) * R)
                                  end
                                  
                                  R, lambda1, lambda2, phi1, phi2 = num2cell(sort([R, lambda1, lambda2, phi1, phi2])){:}
                                  function tmp = code(R, lambda1, lambda2, phi1, phi2)
                                  	tmp = acos((phi1 * phi2)) * R;
                                  end
                                  
                                  NOTE: R, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
                                  code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(phi1 * phi2), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
                                  
                                  \begin{array}{l}
                                  [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                                  \\
                                  \cos^{-1} \left(\phi_1 \cdot \phi_2\right) \cdot R
                                  \end{array}
                                  
                                  Derivation
                                  1. Initial program 75.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 \]
                                  2. Add Preprocessing
                                  3. Step-by-step derivation
                                    1. lift-cos.f64N/A

                                      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                                    2. sin-+PI/2-revN/A

                                      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\sin \left(\left(\lambda_1 - \lambda_2\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
                                    3. sin-sumN/A

                                      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                                    4. flip-+N/A

                                      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                                    5. lower-/.f64N/A

                                      \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) - \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) - \cos \left(\lambda_1 - \lambda_2\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}}\right) \cdot R \]
                                  4. Applied rewrites75.3%

                                    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) \cdot \left(\sin \left(\lambda_1 - \lambda_2\right) \cdot 0\right) - \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right) \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot 1\right)}{\sin \left(\lambda_1 - \lambda_2\right) \cdot 0 - \cos \left(\lambda_2 - \lambda_1\right) \cdot 1}}\right) \cdot R \]
                                  5. Taylor expanded in phi2 around 0

                                    \[\leadsto \cos^{-1} \color{blue}{\left(\phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)} \cdot R \]
                                  6. Step-by-step derivation
                                    1. +-commutativeN/A

                                      \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_2 \cdot \sin \phi_1\right)} \cdot R \]
                                    2. *-commutativeN/A

                                      \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1} + \phi_2 \cdot \sin \phi_1\right) \cdot R \]
                                    3. lower-fma.f64N/A

                                      \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_2 - \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right)} \cdot R \]
                                    4. *-lft-identityN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{1 \cdot \lambda_1}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    5. metadata-evalN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_2 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    6. fp-cancel-sign-sub-invN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    7. remove-double-negN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right)} + -1 \cdot \lambda_1\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    8. mul-1-negN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_2\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_1\right)\right)}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    9. distribute-neg-inN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_2\right)\right) + \lambda_1\right)\right)\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    10. +-commutativeN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\lambda_1 + \left(\mathsf{neg}\left(\lambda_2\right)\right)\right)}\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    11. mul-1-negN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\mathsf{neg}\left(\left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right)\right)\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    12. cos-neg-revN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    13. lower-cos.f64N/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\cos \left(\lambda_1 + -1 \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    14. fp-cancel-sign-sub-invN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    15. metadata-evalN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{1} \cdot \lambda_2\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    16. *-lft-identityN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \color{blue}{\lambda_2}\right), \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    17. lower--.f64N/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \color{blue}{\left(\lambda_1 - \lambda_2\right)}, \cos \phi_1, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    18. lower-cos.f64N/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \color{blue}{\cos \phi_1}, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
                                    19. *-commutativeN/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                                    20. lower-*.f64N/A

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1 \cdot \phi_2}\right)\right) \cdot R \]
                                    21. lower-sin.f6435.1

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \color{blue}{\sin \phi_1} \cdot \phi_2\right)\right) \cdot R \]
                                  7. Applied rewrites35.1%

                                    \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)} \cdot R \]
                                  8. Taylor expanded in phi1 around 0

                                    \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) + \color{blue}{\phi_1 \cdot \phi_2}\right) \cdot R \]
                                  9. Step-by-step derivation
                                    1. Applied rewrites16.7%

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \color{blue}{\phi_1}, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                    2. Taylor expanded in phi1 around inf

                                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2\right) \cdot R \]
                                    3. Step-by-step derivation
                                      1. Applied rewrites9.6%

                                        \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2\right) \cdot R \]
                                      2. Add Preprocessing

                                      Reproduce

                                      ?
                                      herbie shell --seed 2024339 
                                      (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))