Spherical law of cosines

Percentage Accurate: 73.3% → 94.2%
Time: 14.2s
Alternatives: 13
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 13 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.3% 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: 94.2% accurate, 0.7× speedup?

\[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ R \cdot \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \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
 (*
  R
  (acos
   (fma
    (*
     (fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2)))
     (cos phi2))
    (cos phi1)
    (* (sin phi1) (sin phi2))))))
assert(R < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return R * acos(fma((fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), (sin(phi1) * sin(phi2))));
}
R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(R * acos(fma(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), Float64(sin(phi1) * sin(phi2)))))
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[(R * N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
\\
R \cdot \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)
\end{array}
Derivation
  1. Initial program 71.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.f6493.1

      \[\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 rewrites93.1%

    \[\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 0

    \[\leadsto \color{blue}{\cos^{-1} \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. lower-acos.f64N/A

      \[\leadsto \color{blue}{\cos^{-1} \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 \]
    2. *-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 \]
    3. 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 rewrites93.1%

    \[\leadsto \color{blue}{\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 \]
  8. Final simplification93.1%

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

Alternative 2: 94.2% 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(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\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 (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2)))
     (cos phi2))
    (cos phi1)
    (* (sin phi1) (sin 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(fma((fma(cos(lambda2), cos(lambda1), (sin(lambda1) * sin(lambda2))) * cos(phi2)), cos(phi1), (sin(phi1) * sin(phi2)))) * 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(cos(lambda2), cos(lambda1), Float64(sin(lambda1) * sin(lambda2))) * cos(phi2)), cos(phi1), Float64(sin(phi1) * sin(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[(N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $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(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
\end{array}
Derivation
  1. Initial program 71.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.f6493.1

      \[\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 rewrites93.1%

    \[\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 0

    \[\leadsto \color{blue}{\cos^{-1} \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. lower-acos.f64N/A

      \[\leadsto \color{blue}{\cos^{-1} \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 \]
    2. *-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 \]
    3. 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 rewrites93.1%

    \[\leadsto \color{blue}{\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 \]
  8. Step-by-step derivation
    1. Applied rewrites93.1%

      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
    2. Final simplification93.1%

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

    Alternative 3: 83.2% accurate, 0.7× speedup?

    \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.016:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\phi_2 \cdot \phi_2, -0.16666666666666666, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \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 (<= phi2 -0.016)
       (*
        (acos
         (fma
          (fma 0.0 (sin (- lambda1 lambda2)) (cos (- lambda1 lambda2)))
          (* (cos phi1) (cos phi2))
          (* (sin phi1) (sin phi2))))
        R)
       (if (<= phi2 3.1e+19)
         (*
          (acos
           (fma
            (*
             (fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2)))
             (cos phi2))
            (cos phi1)
            (* (* (fma (* phi2 phi2) -0.16666666666666666 1.0) (sin phi1)) phi2)))
          R)
         (*
          (acos
           (fma
            (sin phi2)
            (sin phi1)
            (* (* (cos (- lambda2 lambda1)) (cos phi1)) (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 (phi2 <= -0.016) {
    		tmp = acos(fma(fma(0.0, sin((lambda1 - lambda2)), cos((lambda1 - lambda2))), (cos(phi1) * cos(phi2)), (sin(phi1) * sin(phi2)))) * R;
    	} else if (phi2 <= 3.1e+19) {
    		tmp = acos(fma((fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), ((fma((phi2 * phi2), -0.16666666666666666, 1.0) * sin(phi1)) * phi2))) * R;
    	} else {
    		tmp = acos(fma(sin(phi2), sin(phi1), ((cos((lambda2 - lambda1)) * cos(phi1)) * 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 (phi2 <= -0.016)
    		tmp = Float64(acos(fma(fma(0.0, sin(Float64(lambda1 - lambda2)), cos(Float64(lambda1 - lambda2))), Float64(cos(phi1) * cos(phi2)), Float64(sin(phi1) * sin(phi2)))) * R);
    	elseif (phi2 <= 3.1e+19)
    		tmp = Float64(acos(fma(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), Float64(Float64(fma(Float64(phi2 * phi2), -0.16666666666666666, 1.0) * sin(phi1)) * phi2))) * R);
    	else
    		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)) * 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[LessEqual[phi2, -0.016], N[(N[ArcCos[N[(N[(0.0 * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi2, 3.1e+19], N[(N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[(N[(N[(phi2 * phi2), $MachinePrecision] * -0.16666666666666666 + 1.0), $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $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]]]
    
    \begin{array}{l}
    [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
    \\
    \begin{array}{l}
    \mathbf{if}\;\phi_2 \leq -0.016:\\
    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
    
    \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\
    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\phi_2 \cdot \phi_2, -0.16666666666666666, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2\right)\right) \cdot R\\
    
    \mathbf{else}:\\
    \;\;\;\;\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\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 3 regimes
    2. if phi2 < -0.016

      1. Initial program 79.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 \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.0

          \[\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.0%

        \[\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. Step-by-step derivation
        1. lift-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}{\left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\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 \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_2 \cdot \cos \lambda_1\right)\right) \cdot R \]
        3. +-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(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
        4. lift-*.f64N/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_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
        5. 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 \left(\color{blue}{\cos \lambda_2} \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
        6. 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 \left(\cos \lambda_2 \cdot \color{blue}{\cos \lambda_1} + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
        7. lift-*.f64N/A

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

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

          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
        10. 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}{\cos \left(\lambda_2 - \lambda_1\right)}\right) \cdot R \]
        11. 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_2 - \lambda_1\right)}\right) \cdot R \]
        12. 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_2 - \lambda_1\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
        13. 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_2 - \lambda_1\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
        14. 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 \left(\lambda_2 - \lambda_1\right), \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
        15. 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 \left(\lambda_2 - \lambda_1\right)}, \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        16. 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 \left(\lambda_2 - \lambda_1\right), \color{blue}{\cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        17. div-invN/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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        18. metadata-evalN/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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \color{blue}{\frac{1}{2}}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        19. 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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        20. lower-PI.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\color{blue}{\mathsf{PI}\left(\right)} \cdot \frac{1}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
        21. 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 \mathsf{fma}\left(\sin \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right), \color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
      6. Applied rewrites79.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot 0.5\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\mathsf{PI}\left(\right) \cdot 0.5\right)\right)}\right) \cdot R \]
      7. Taylor expanded in lambda1 around 0

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

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

      if -0.016 < phi2 < 3.1e19

      1. Initial program 65.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. 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.3

          \[\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.3%

        \[\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 0

        \[\leadsto \color{blue}{\cos^{-1} \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. lower-acos.f64N/A

          \[\leadsto \color{blue}{\cos^{-1} \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 \]
        2. *-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 \]
        3. 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 rewrites88.3%

        \[\leadsto \color{blue}{\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 \]
      8. Taylor expanded in phi2 around 0

        \[\leadsto \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, \phi_2 \cdot \left(\sin \phi_1 + \frac{-1}{6} \cdot \left({\phi_2}^{2} \cdot \sin \phi_1\right)\right)\right)\right) \cdot R \]
      9. Step-by-step derivation
        1. Applied rewrites86.2%

          \[\leadsto \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, \left(\mathsf{fma}\left(\phi_2 \cdot \phi_2, -0.16666666666666666, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2\right)\right) \cdot R \]

        if 3.1e19 < phi2

        1. Initial program 74.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

            \[\leadsto \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 \]
        7. Recombined 3 regimes into one program.
        8. Final simplification82.2%

          \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.016:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\phi_2 \cdot \phi_2, -0.16666666666666666, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \end{array} \]
        9. Add Preprocessing

        Alternative 4: 83.3% accurate, 0.7× speedup?

        \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.0132:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \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 (<= phi2 -0.0132)
           (*
            (acos
             (fma
              (fma 0.0 (sin (- lambda1 lambda2)) (cos (- lambda1 lambda2)))
              (* (cos phi1) (cos phi2))
              (* (sin phi1) (sin phi2))))
            R)
           (if (<= phi2 3.1e+19)
             (*
              (acos
               (fma
                (*
                 (fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2)))
                 (cos phi2))
                (cos phi1)
                (* (sin phi1) phi2)))
              R)
             (*
              (acos
               (fma
                (sin phi2)
                (sin phi1)
                (* (* (cos (- lambda2 lambda1)) (cos phi1)) (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 (phi2 <= -0.0132) {
        		tmp = acos(fma(fma(0.0, sin((lambda1 - lambda2)), cos((lambda1 - lambda2))), (cos(phi1) * cos(phi2)), (sin(phi1) * sin(phi2)))) * R;
        	} else if (phi2 <= 3.1e+19) {
        		tmp = acos(fma((fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), (sin(phi1) * phi2))) * R;
        	} else {
        		tmp = acos(fma(sin(phi2), sin(phi1), ((cos((lambda2 - lambda1)) * cos(phi1)) * 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 (phi2 <= -0.0132)
        		tmp = Float64(acos(fma(fma(0.0, sin(Float64(lambda1 - lambda2)), cos(Float64(lambda1 - lambda2))), Float64(cos(phi1) * cos(phi2)), Float64(sin(phi1) * sin(phi2)))) * R);
        	elseif (phi2 <= 3.1e+19)
        		tmp = Float64(acos(fma(Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2))) * cos(phi2)), cos(phi1), Float64(sin(phi1) * phi2))) * R);
        	else
        		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)) * 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[LessEqual[phi2, -0.0132], N[(N[ArcCos[N[(N[(0.0 * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi2, 3.1e+19], N[(N[ArcCos[N[(N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $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]]]
        
        \begin{array}{l}
        [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
        \\
        \begin{array}{l}
        \mathbf{if}\;\phi_2 \leq -0.0132:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
        
        \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\
        \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right) \cdot R\\
        
        \mathbf{else}:\\
        \;\;\;\;\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\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 3 regimes
        2. if phi2 < -0.0132

          1. Initial program 79.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 \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.0

              \[\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.0%

            \[\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. Step-by-step derivation
            1. lift-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}{\left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\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 \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_2 \cdot \cos \lambda_1\right)\right) \cdot R \]
            3. +-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(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
            4. lift-*.f64N/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_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
            5. 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 \left(\color{blue}{\cos \lambda_2} \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
            6. 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 \left(\cos \lambda_2 \cdot \color{blue}{\cos \lambda_1} + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
            7. lift-*.f64N/A

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

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

              \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
            10. 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}{\cos \left(\lambda_2 - \lambda_1\right)}\right) \cdot R \]
            11. 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_2 - \lambda_1\right)}\right) \cdot R \]
            12. 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_2 - \lambda_1\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
            13. 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_2 - \lambda_1\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
            14. 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 \left(\lambda_2 - \lambda_1\right), \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
            15. 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 \left(\lambda_2 - \lambda_1\right)}, \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            16. 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 \left(\lambda_2 - \lambda_1\right), \color{blue}{\cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            17. div-invN/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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            18. metadata-evalN/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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \color{blue}{\frac{1}{2}}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            19. 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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            20. lower-PI.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\color{blue}{\mathsf{PI}\left(\right)} \cdot \frac{1}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
            21. 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 \mathsf{fma}\left(\sin \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right), \color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
          6. Applied rewrites79.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot 0.5\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\mathsf{PI}\left(\right) \cdot 0.5\right)\right)}\right) \cdot R \]
          7. Taylor expanded in lambda1 around 0

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

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

          if -0.0132 < phi2 < 3.1e19

          1. Initial program 65.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. 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.3

              \[\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.3%

            \[\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 0

            \[\leadsto \color{blue}{\cos^{-1} \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. lower-acos.f64N/A

              \[\leadsto \color{blue}{\cos^{-1} \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 \]
            2. *-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 \]
            3. 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 rewrites88.3%

            \[\leadsto \color{blue}{\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 \]
          8. Taylor expanded in phi2 around 0

            \[\leadsto \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, \phi_2 \cdot \sin \phi_1\right)\right) \cdot R \]
          9. Step-by-step derivation
            1. Applied rewrites86.2%

              \[\leadsto \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_1 \cdot \phi_2\right)\right) \cdot R \]

            if 3.1e19 < phi2

            1. Initial program 74.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                \[\leadsto \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 \]
            7. Recombined 3 regimes into one program.
            8. Final simplification82.2%

              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.0132:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 3.1 \cdot 10^{+19}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \end{array} \]
            9. Add Preprocessing

            Alternative 5: 83.2% accurate, 0.7× speedup?

            \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -7.2 \cdot 10^{-5}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 1.06 \cdot 10^{-16}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \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 (<= phi2 -7.2e-5)
               (*
                (acos
                 (fma
                  (fma 0.0 (sin (- lambda1 lambda2)) (cos (- lambda1 lambda2)))
                  (* (cos phi1) (cos phi2))
                  (* (sin phi1) (sin phi2))))
                R)
               (if (<= phi2 1.06e-16)
                 (*
                  (acos
                   (fma
                    (sin phi2)
                    (sin phi1)
                    (*
                     (fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2)))
                     (cos phi1))))
                  R)
                 (*
                  (acos
                   (fma
                    (sin phi2)
                    (sin phi1)
                    (* (* (cos (- lambda2 lambda1)) (cos phi1)) (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 (phi2 <= -7.2e-5) {
            		tmp = acos(fma(fma(0.0, sin((lambda1 - lambda2)), cos((lambda1 - lambda2))), (cos(phi1) * cos(phi2)), (sin(phi1) * sin(phi2)))) * R;
            	} else if (phi2 <= 1.06e-16) {
            		tmp = acos(fma(sin(phi2), sin(phi1), (fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2))) * cos(phi1)))) * R;
            	} else {
            		tmp = acos(fma(sin(phi2), sin(phi1), ((cos((lambda2 - lambda1)) * cos(phi1)) * 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 (phi2 <= -7.2e-5)
            		tmp = Float64(acos(fma(fma(0.0, sin(Float64(lambda1 - lambda2)), cos(Float64(lambda1 - lambda2))), Float64(cos(phi1) * cos(phi2)), Float64(sin(phi1) * sin(phi2)))) * R);
            	elseif (phi2 <= 1.06e-16)
            		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2))) * cos(phi1)))) * R);
            	else
            		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)) * 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[LessEqual[phi2, -7.2e-5], N[(N[ArcCos[N[(N[(0.0 * N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] + N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], If[LessEqual[phi2, 1.06e-16], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $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]]]
            
            \begin{array}{l}
            [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
            \\
            \begin{array}{l}
            \mathbf{if}\;\phi_2 \leq -7.2 \cdot 10^{-5}:\\
            \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
            
            \mathbf{elif}\;\phi_2 \leq 1.06 \cdot 10^{-16}:\\
            \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\
            
            \mathbf{else}:\\
            \;\;\;\;\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\\
            
            
            \end{array}
            \end{array}
            
            Derivation
            1. Split input into 3 regimes
            2. if phi2 < -7.20000000000000018e-5

              1. Initial program 79.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 \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.0

                  \[\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.0%

                \[\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. Step-by-step derivation
                1. lift-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}{\left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\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 \left(\color{blue}{\sin \lambda_2 \cdot \sin \lambda_1} + \cos \lambda_2 \cdot \cos \lambda_1\right)\right) \cdot R \]
                3. +-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(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)}\right) \cdot R \]
                4. lift-*.f64N/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_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
                5. 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 \left(\color{blue}{\cos \lambda_2} \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
                6. 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 \left(\cos \lambda_2 \cdot \color{blue}{\cos \lambda_1} + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R \]
                7. lift-*.f64N/A

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

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

                  \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \color{blue}{\sin \lambda_1}\right)\right) \cdot R \]
                10. 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}{\cos \left(\lambda_2 - \lambda_1\right)}\right) \cdot R \]
                11. 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_2 - \lambda_1\right)}\right) \cdot R \]
                12. 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_2 - \lambda_1\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}\right) \cdot R \]
                13. 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_2 - \lambda_1\right) \cdot \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right) + \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                14. 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 \left(\lambda_2 - \lambda_1\right), \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)}\right) \cdot R \]
                15. 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 \left(\lambda_2 - \lambda_1\right)}, \cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                16. 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 \left(\lambda_2 - \lambda_1\right), \color{blue}{\cos \left(\frac{\mathsf{PI}\left(\right)}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                17. div-invN/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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                18. metadata-evalN/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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \color{blue}{\frac{1}{2}}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                19. 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 \left(\lambda_2 - \lambda_1\right), \cos \color{blue}{\left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right)}, \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                20. lower-PI.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\color{blue}{\mathsf{PI}\left(\right)} \cdot \frac{1}{2}\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
                21. 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 \mathsf{fma}\left(\sin \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot \frac{1}{2}\right), \color{blue}{\cos \left(\lambda_2 - \lambda_1\right)} \cdot \sin \left(\frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right) \cdot R \]
              6. Applied rewrites79.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 \left(\lambda_2 - \lambda_1\right), \cos \left(\mathsf{PI}\left(\right) \cdot 0.5\right), \cos \left(\lambda_2 - \lambda_1\right) \cdot \sin \left(\mathsf{PI}\left(\right) \cdot 0.5\right)\right)}\right) \cdot R \]
              7. Taylor expanded in lambda1 around 0

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

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

              if -7.20000000000000018e-5 < phi2 < 1.06e-16

              1. Initial program 65.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
              7. Step-by-step derivation
                1. Applied rewrites65.6%

                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                2. Step-by-step derivation
                  1. Applied rewrites87.7%

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

                  if 1.06e-16 < phi2

                  1. Initial program 73.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

                    \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right) \cdot \cos \phi_1\right)\right)} \cdot R \]
                  6. Step-by-step derivation
                    1. Applied rewrites74.0%

                      \[\leadsto \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 \]
                  7. Recombined 3 regimes into one program.
                  8. Final simplification82.4%

                    \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq -7.2 \cdot 10^{-5}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(0, \sin \left(\lambda_1 - \lambda_2\right), \cos \left(\lambda_1 - \lambda_2\right)\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_2 \leq 1.06 \cdot 10^{-16}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\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\\ \end{array} \]
                  9. Add Preprocessing

                  Alternative 6: 63.1% 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 \phi_1 \cdot \cos \phi_2\\ \mathbf{if}\;\lambda_2 \leq 2.2 \cdot 10^{-5}:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot t\_0 + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \lambda_2\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 phi1) (cos phi2))))
                     (if (<= lambda2 2.2e-5)
                       (* (acos (+ (* (cos lambda1) t_0) (* (sin phi1) (sin phi2)))) R)
                       (* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos lambda2)))) 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(phi1) * cos(phi2);
                  	double tmp;
                  	if (lambda2 <= 2.2e-5) {
                  		tmp = acos(((cos(lambda1) * t_0) + (sin(phi1) * sin(phi2)))) * R;
                  	} else {
                  		tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(lambda2)))) * 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(phi1) * cos(phi2))
                  	tmp = 0.0
                  	if (lambda2 <= 2.2e-5)
                  		tmp = Float64(acos(Float64(Float64(cos(lambda1) * t_0) + Float64(sin(phi1) * sin(phi2)))) * R);
                  	else
                  		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(lambda2)))) * 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[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda2, 2.2e-5], N[(N[ArcCos[N[(N[(N[Cos[lambda1], $MachinePrecision] * t$95$0), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[lambda2], $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 \phi_1 \cdot \cos \phi_2\\
                  \mathbf{if}\;\lambda_2 \leq 2.2 \cdot 10^{-5}:\\
                  \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot t\_0 + \sin \phi_1 \cdot \sin \phi_2\right) \cdot R\\
                  
                  \mathbf{else}:\\
                  \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \lambda_2\right)\right) \cdot R\\
                  
                  
                  \end{array}
                  \end{array}
                  
                  Derivation
                  1. Split input into 2 regimes
                  2. if lambda2 < 2.1999999999999999e-5

                    1. Initial program 76.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} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\cos \lambda_1}\right) \cdot R \]
                    4. Step-by-step derivation
                      1. lower-cos.f6463.3

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

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

                    if 2.1999999999999999e-5 < lambda2

                    1. Initial program 57.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right) \cdot R \]
                    7. Step-by-step derivation
                      1. Applied rewrites57.1%

                        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)\right)\right) \cdot R \]
                    8. Recombined 2 regimes into one program.
                    9. Final simplification61.6%

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

                    Alternative 7: 63.1% accurate, 1.0× speedup?

                    \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\lambda_2 \leq 2.2 \cdot 10^{-5}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1 \cdot \cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\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
                     (if (<= lambda2 2.2e-5)
                       (*
                        (acos
                         (fma (* (cos lambda1) (cos phi1)) (cos phi2) (* (sin phi1) (sin phi2))))
                        R)
                       (*
                        (acos
                         (fma (sin phi2) (sin phi1) (* (* (cos phi1) (cos phi2)) (cos lambda2))))
                        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 (lambda2 <= 2.2e-5) {
                    		tmp = acos(fma((cos(lambda1) * cos(phi1)), cos(phi2), (sin(phi1) * sin(phi2)))) * R;
                    	} else {
                    		tmp = acos(fma(sin(phi2), sin(phi1), ((cos(phi1) * cos(phi2)) * cos(lambda2)))) * 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 (lambda2 <= 2.2e-5)
                    		tmp = Float64(acos(fma(Float64(cos(lambda1) * cos(phi1)), cos(phi2), Float64(sin(phi1) * sin(phi2)))) * R);
                    	else
                    		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi1) * cos(phi2)) * cos(lambda2)))) * 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[lambda2, 2.2e-5], N[(N[ArcCos[N[(N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $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_2 \leq 2.2 \cdot 10^{-5}:\\
                    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1 \cdot \cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right)\right) \cdot R\\
                    
                    
                    \end{array}
                    \end{array}
                    
                    Derivation
                    1. Split input into 2 regimes
                    2. if lambda2 < 2.1999999999999999e-5

                      1. Initial program 76.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. +-commutativeN/A

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

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

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

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

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

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

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

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

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

                          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} + \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R \]
                        13. *-commutativeN/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_1 \cdot \sin \phi_2\right)\right) \cdot R \]
                        14. cos-diff-revN/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_1 \cdot \sin \phi_2\right)\right) \cdot R \]
                        15. lower-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_1 \cdot \sin \phi_2\right)\right) \cdot R \]
                        16. lower--.f6476.5

                          \[\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_1 \cdot \sin \phi_2\right)\right) \cdot R \]
                        17. lift-*.f64N/A

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

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

                        \[\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 \]
                      5. Taylor expanded in lambda2 around 0

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

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

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

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

                      if 2.1999999999999999e-5 < lambda2

                      1. Initial program 57.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right) \cdot R \]
                      7. Step-by-step derivation
                        1. Applied rewrites57.1%

                          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)\right)\right) \cdot R \]
                      8. Recombined 2 regimes into one program.
                      9. Final simplification61.6%

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

                      Alternative 8: 57.9% accurate, 1.0× 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.075:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\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
                       (if (<= lambda1 -0.075)
                         (* (acos (fma (sin phi2) (sin phi1) (* (cos lambda1) (cos phi1)))) R)
                         (*
                          (acos
                           (fma (sin phi2) (sin phi1) (* (* (cos phi1) (cos phi2)) (cos lambda2))))
                          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.075) {
                      		tmp = acos(fma(sin(phi2), sin(phi1), (cos(lambda1) * cos(phi1)))) * R;
                      	} else {
                      		tmp = acos(fma(sin(phi2), sin(phi1), ((cos(phi1) * cos(phi2)) * cos(lambda2)))) * 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.075)
                      		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(cos(lambda1) * cos(phi1)))) * R);
                      	else
                      		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi1) * cos(phi2)) * cos(lambda2)))) * 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[lambda1, -0.075], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $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.075:\\
                      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right)\right) \cdot R\\
                      
                      
                      \end{array}
                      \end{array}
                      
                      Derivation
                      1. Split input into 2 regimes
                      2. if lambda1 < -0.0749999999999999972

                        1. Initial program 61.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                        7. Step-by-step derivation
                          1. Applied rewrites44.3%

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

                            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R \]
                          3. Step-by-step derivation
                            1. Applied rewrites43.9%

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

                            if -0.0749999999999999972 < lambda1

                            1. Initial program 74.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 \color{blue}{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
                            4. Step-by-step derivation
                              1. lower-acos.f64N/A

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

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

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

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

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

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

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

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

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

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right) \cdot R \]
                            7. Step-by-step derivation
                              1. Applied rewrites58.7%

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)\right)\right) \cdot R \]
                            8. Recombined 2 regimes into one program.
                            9. Final simplification55.2%

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

                            Alternative 9: 73.3% accurate, 1.0× speedup?

                            \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \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 \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 phi2)
                                (sin phi1)
                                (* (* (cos (- lambda2 lambda1)) (cos phi1)) (cos 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(fma(sin(phi2), sin(phi1), ((cos((lambda2 - lambda1)) * cos(phi1)) * cos(phi2)))) * R;
                            }
                            
                            R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	return Float64(acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1)) * cos(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[(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]
                            
                            \begin{array}{l}
                            [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                            \\
                            \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
                            \end{array}
                            
                            Derivation
                            1. Initial program 71.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                \[\leadsto \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 \]
                              2. Add Preprocessing

                              Alternative 10: 58.1% 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_1 - \lambda_2\right)\\ \mathbf{if}\;\phi_2 \leq 5.4 \cdot 10^{-6}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\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 (- lambda1 lambda2))))
                                 (if (<= phi2 5.4e-6)
                                   (* (acos (fma (sin phi2) (sin phi1) (* t_0 (cos phi1)))) R)
                                   (* (acos (fma (sin phi2) (sin phi1) (* 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((lambda1 - lambda2));
                              	double tmp;
                              	if (phi2 <= 5.4e-6) {
                              		tmp = acos(fma(sin(phi2), sin(phi1), (t_0 * cos(phi1)))) * R;
                              	} else {
                              		tmp = acos(fma(sin(phi2), sin(phi1), (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(lambda1 - lambda2))
                              	tmp = 0.0
                              	if (phi2 <= 5.4e-6)
                              		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(t_0 * cos(phi1)))) * R);
                              	else
                              		tmp = Float64(acos(fma(sin(phi2), sin(phi1), 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[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, 5.4e-6], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], 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]]]
                              
                              \begin{array}{l}
                              [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\
                              \\
                              \begin{array}{l}
                              t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
                              \mathbf{if}\;\phi_2 \leq 5.4 \cdot 10^{-6}:\\
                              \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_1\right)\right) \cdot R\\
                              
                              \mathbf{else}:\\
                              \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\
                              
                              
                              \end{array}
                              \end{array}
                              
                              Derivation
                              1. Split input into 2 regimes
                              2. if phi2 < 5.39999999999999997e-6

                                1. Initial program 70.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                  \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                7. Step-by-step derivation
                                  1. Applied rewrites50.8%

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

                                  if 5.39999999999999997e-6 < phi2

                                  1. Initial program 73.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 \color{blue}{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
                                  4. Step-by-step derivation
                                    1. lower-acos.f64N/A

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

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

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

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

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

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

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

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

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

                                    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                  7. Step-by-step derivation
                                    1. Applied rewrites47.0%

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

                                  Alternative 11: 36.6% accurate, 1.2× speedup?

                                  \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \begin{array}{l} \mathbf{if}\;\lambda_2 \leq 0.00062:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \cos \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
                                   (if (<= lambda2 0.00062)
                                     (* (acos (fma (sin phi2) (sin phi1) (* (cos lambda1) (cos phi1)))) R)
                                     (* (acos (fma (sin phi2) (sin phi1) (* (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 (lambda2 <= 0.00062) {
                                  		tmp = acos(fma(sin(phi2), sin(phi1), (cos(lambda1) * cos(phi1)))) * R;
                                  	} else {
                                  		tmp = acos(fma(sin(phi2), sin(phi1), (cos(lambda2) * 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 (lambda2 <= 0.00062)
                                  		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(cos(lambda1) * cos(phi1)))) * R);
                                  	else
                                  		tmp = Float64(acos(fma(sin(phi2), sin(phi1), Float64(cos(lambda2) * 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[lambda2, 0.00062], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[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}
                                  \mathbf{if}\;\lambda_2 \leq 0.00062:\\
                                  \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R\\
                                  
                                  \mathbf{else}:\\
                                  \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_2 \cdot \cos \phi_1\right)\right) \cdot R\\
                                  
                                  
                                  \end{array}
                                  \end{array}
                                  
                                  Derivation
                                  1. Split input into 2 regimes
                                  2. if lambda2 < 6.2e-4

                                    1. Initial program 76.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                      \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                    7. Step-by-step derivation
                                      1. Applied rewrites44.2%

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

                                        \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R \]
                                      3. Step-by-step derivation
                                        1. Applied rewrites35.6%

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

                                        if 6.2e-4 < lambda2

                                        1. Initial program 57.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                        7. Step-by-step derivation
                                          1. Applied rewrites38.3%

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

                                            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\mathsf{neg}\left(\lambda_2\right)\right) \cdot \cos \phi_1\right)\right) \cdot R \]
                                          3. Step-by-step derivation
                                            1. Applied rewrites38.0%

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

                                          Alternative 12: 42.8% accurate, 1.2× speedup?

                                          \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \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 (sin phi2) (sin phi1) (* (cos (- lambda1 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) {
                                          	return acos(fma(sin(phi2), sin(phi1), (cos((lambda1 - lambda2)) * cos(phi1)))) * R;
                                          }
                                          
                                          R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                                          function code(R, lambda1, lambda2, phi1, phi2)
                                          	return Float64(acos(fma(sin(phi2), sin(phi1), Float64(cos(Float64(lambda1 - lambda2)) * 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[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[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(\sin \phi_2, \sin \phi_1, \cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)\right) \cdot R
                                          \end{array}
                                          
                                          Derivation
                                          1. Initial program 71.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                            \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                          7. Step-by-step derivation
                                            1. Applied rewrites42.6%

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

                                            Alternative 13: 30.5% accurate, 1.2× speedup?

                                            \[\begin{array}{l} [R, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R, lambda1, lambda2, phi1, phi2])\\ \\ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \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 (sin phi2) (sin phi1) (* (cos 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(fma(sin(phi2), sin(phi1), (cos(lambda1) * cos(phi1)))) * R;
                                            }
                                            
                                            R, lambda1, lambda2, phi1, phi2 = sort([R, lambda1, lambda2, phi1, phi2])
                                            function code(R, lambda1, lambda2, phi1, phi2)
                                            	return Float64(acos(fma(sin(phi2), sin(phi1), Float64(cos(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[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[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(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R
                                            \end{array}
                                            
                                            Derivation
                                            1. Initial program 71.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 lambda1 around 0

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

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

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

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

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

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

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

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

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

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

                                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                                            7. Step-by-step derivation
                                              1. Applied rewrites42.6%

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

                                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \lambda_1 \cdot \cos \phi_1\right)\right) \cdot R \]
                                              3. Step-by-step derivation
                                                1. Applied rewrites29.8%

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

                                                Reproduce

                                                ?
                                                herbie shell --seed 2024312 
                                                (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))