Spherical law of cosines

Percentage Accurate: 74.0% → 94.0%
Time: 30.8s
Alternatives: 22
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 22 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: 74.0% 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.0% accurate, 0.6× speedup?

\[\begin{array}{l} \\ \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right) \cdot R \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  (acos
   (fma
    (sin phi1)
    (sin phi2)
    (*
     (cos phi1)
     (*
      (cos phi2)
      (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2)))))))
  R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return acos(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))))))) * R;
}
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda1) * cos(lambda2))))))) * R)
end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}

\\
\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right) \cdot R
\end{array}
Derivation
  1. Initial program 72.3%

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
  2. Step-by-step derivation
    1. Simplified72.4%

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

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

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

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

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

    Alternative 2: 94.0% accurate, 0.6× speedup?

    \[\begin{array}{l} \\ R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \end{array} \]
    (FPCore (R lambda1 lambda2 phi1 phi2)
     :precision binary64
     (*
      R
      (acos
       (+
        (* (sin phi1) (sin phi2))
        (*
         (* (cos phi1) (cos phi2))
         (fma (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2))))))))
    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
    	return R * acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda1) * sin(lambda2))))));
    }
    
    function code(R, lambda1, lambda2, phi1, phi2)
    	return Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda1) * sin(lambda2)))))))
    end
    
    code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * 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[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
    
    \begin{array}{l}
    
    \\
    R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)
    \end{array}
    
    Derivation
    1. Initial program 72.3%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Step-by-step derivation
      1. cos-diff55.8%

        \[\leadsto \cos^{-1} \left(\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 \]
    3. Applied egg-rr95.3%

      \[\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. Step-by-step derivation
      1. cos-neg55.8%

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

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

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

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

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

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

    Alternative 3: 83.9% accurate, 0.7× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.00022:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\ \end{array} \end{array} \]
    (FPCore (R lambda1 lambda2 phi1 phi2)
     :precision binary64
     (if (<= phi1 -6600000000000.0)
       (*
        R
        (-
         (/ PI 2.0)
         (asin
          (fma
           (sin phi1)
           (sin phi2)
           (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1))))))))
       (if (<= phi1 0.00022)
         (*
          R
          (acos
           (+
            (*
             (* (cos phi1) (cos phi2))
             (fma (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2))))
            (* phi1 (sin phi2)))))
         (*
          R
          (log
           (exp
            (acos
             (fma
              (sin phi1)
              (sin phi2)
              (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))))))))
    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
    	double tmp;
    	if (phi1 <= -6600000000000.0) {
    		tmp = R * ((((double) M_PI) / 2.0) - asin(fma(sin(phi1), sin(phi2), (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1)))))));
    	} else if (phi1 <= 0.00022) {
    		tmp = R * acos((((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda1) * sin(lambda2)))) + (phi1 * sin(phi2))));
    	} else {
    		tmp = R * log(exp(acos(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))))));
    	}
    	return tmp;
    }
    
    function code(R, lambda1, lambda2, phi1, phi2)
    	tmp = 0.0
    	if (phi1 <= -6600000000000.0)
    		tmp = Float64(R * Float64(Float64(pi / 2.0) - asin(fma(sin(phi1), sin(phi2), Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))));
    	elseif (phi1 <= 0.00022)
    		tmp = Float64(R * acos(Float64(Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda1) * sin(lambda2)))) + Float64(phi1 * sin(phi2)))));
    	else
    		tmp = Float64(R * log(exp(acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))))));
    	end
    	return tmp
    end
    
    code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -6600000000000.0], N[(R * N[(N[(Pi / 2.0), $MachinePrecision] - N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.00022], N[(R * N[ArcCos[N[(N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[Log[N[Exp[N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    \mathbf{if}\;\phi_1 \leq -6600000000000:\\
    \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\
    
    \mathbf{elif}\;\phi_1 \leq 0.00022:\\
    \;\;\;\;R \cdot \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) + \phi_1 \cdot \sin \phi_2\right)\\
    
    \mathbf{else}:\\
    \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 3 regimes
    2. if phi1 < -6.6e12

      1. Initial program 77.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. Step-by-step derivation
        1. Simplified78.0%

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

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

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

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

            \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right)\right)} \cdot R \]
          2. fma-udef99.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)}\right) \cdot R \]
          3. associate-*r*98.9%

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

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
          5. cos-diff77.9%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
          6. +-commutative77.9%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)}\right) \cdot R \]
          7. *-commutative77.9%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
          8. fma-udef78.0%

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

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

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)}\right)\right)\right) \cdot R \]
          2. sub-neg78.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          3. neg-mul-178.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          4. neg-mul-178.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{\left(-\lambda_2\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          5. remove-double-neg78.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          6. mul-1-neg78.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          7. distribute-neg-in78.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(-\left(-1 \cdot \lambda_1 + \lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          8. +-commutative78.0%

            \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(-\color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
          9. *-commutative78.0%

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

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

        if -6.6e12 < phi1 < 2.20000000000000008e-4

        1. Initial program 67.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. Taylor expanded in phi1 around 0 64.8%

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

            \[\leadsto \cos^{-1} \left(\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. Applied egg-rr89.2%

          \[\leadsto \cos^{-1} \left(\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 \]
        5. Step-by-step derivation
          1. cos-neg89.2%

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

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

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

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

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

        if 2.20000000000000008e-4 < phi1

        1. Initial program 76.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. Step-by-step derivation
          1. Simplified76.8%

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

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

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

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

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

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

              \[\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. cos-diff76.6%

              \[\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 \]
            5. +-commutative76.6%

              \[\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 \]
            6. *-commutative76.6%

              \[\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 \]
            7. fma-udef76.7%

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

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

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

          \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.00022:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\ \end{array} \]

        Alternative 4: 94.0% accurate, 0.7× speedup?

        \[\begin{array}{l} \\ R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) \end{array} \]
        (FPCore (R lambda1 lambda2 phi1 phi2)
         :precision binary64
         (*
          R
          (acos
           (+
            (* (sin phi1) (sin phi2))
            (*
             (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2)))
             (* (cos phi1) (cos phi2)))))))
        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	return R * acos(((sin(phi1) * sin(phi2)) + (((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))) * (cos(phi1) * cos(phi2)))));
        }
        
        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 = r * acos(((sin(phi1) * sin(phi2)) + (((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))) * (cos(phi1) * cos(phi2)))))
        end function
        
        public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	return R * Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + (((Math.sin(lambda1) * Math.sin(lambda2)) + (Math.cos(lambda1) * Math.cos(lambda2))) * (Math.cos(phi1) * Math.cos(phi2)))));
        }
        
        def code(R, lambda1, lambda2, phi1, phi2):
        	return R * math.acos(((math.sin(phi1) * math.sin(phi2)) + (((math.sin(lambda1) * math.sin(lambda2)) + (math.cos(lambda1) * math.cos(lambda2))) * (math.cos(phi1) * math.cos(phi2)))))
        
        function code(R, lambda1, lambda2, phi1, phi2)
        	return Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda1) * cos(lambda2))) * Float64(cos(phi1) * cos(phi2))))))
        end
        
        function tmp = code(R, lambda1, lambda2, phi1, phi2)
        	tmp = R * acos(((sin(phi1) * sin(phi2)) + (((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))) * (cos(phi1) * cos(phi2)))));
        end
        
        code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
        
        \begin{array}{l}
        
        \\
        R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)
        \end{array}
        
        Derivation
        1. Initial program 72.3%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Step-by-step derivation
          1. cos-diff95.4%

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

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

          \[\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 \]
        4. Final simplification95.3%

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

        Alternative 5: 83.9% accurate, 0.7× speedup?

        \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.26:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\ \end{array} \end{array} \]
        (FPCore (R lambda1 lambda2 phi1 phi2)
         :precision binary64
         (if (<= phi1 -6600000000000.0)
           (*
            R
            (-
             (/ PI 2.0)
             (asin
              (fma
               (sin phi1)
               (sin phi2)
               (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1))))))))
           (if (<= phi1 0.26)
             (*
              R
              (acos
               (+
                (*
                 (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2)))
                 (* (cos phi1) (cos phi2)))
                (* phi1 (sin phi2)))))
             (*
              R
              (log
               (exp
                (acos
                 (fma
                  (sin phi1)
                  (sin phi2)
                  (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))))))))
        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
        	double tmp;
        	if (phi1 <= -6600000000000.0) {
        		tmp = R * ((((double) M_PI) / 2.0) - asin(fma(sin(phi1), sin(phi2), (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1)))))));
        	} else if (phi1 <= 0.26) {
        		tmp = R * acos(((((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))) * (cos(phi1) * cos(phi2))) + (phi1 * sin(phi2))));
        	} else {
        		tmp = R * log(exp(acos(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))))));
        	}
        	return tmp;
        }
        
        function code(R, lambda1, lambda2, phi1, phi2)
        	tmp = 0.0
        	if (phi1 <= -6600000000000.0)
        		tmp = Float64(R * Float64(Float64(pi / 2.0) - asin(fma(sin(phi1), sin(phi2), Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))));
        	elseif (phi1 <= 0.26)
        		tmp = Float64(R * acos(Float64(Float64(Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda1) * cos(lambda2))) * Float64(cos(phi1) * cos(phi2))) + Float64(phi1 * sin(phi2)))));
        	else
        		tmp = Float64(R * log(exp(acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))))));
        	end
        	return tmp
        end
        
        code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -6600000000000.0], N[(R * N[(N[(Pi / 2.0), $MachinePrecision] - N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.26], N[(R * N[ArcCos[N[(N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[Log[N[Exp[N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
        
        \begin{array}{l}
        
        \\
        \begin{array}{l}
        \mathbf{if}\;\phi_1 \leq -6600000000000:\\
        \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\
        
        \mathbf{elif}\;\phi_1 \leq 0.26:\\
        \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\
        
        \mathbf{else}:\\
        \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 3 regimes
        2. if phi1 < -6.6e12

          1. Initial program 77.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. Step-by-step derivation
            1. Simplified78.0%

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

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

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

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

                \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right)\right)} \cdot R \]
              2. fma-udef99.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)}\right) \cdot R \]
              3. associate-*r*98.9%

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

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
              5. cos-diff77.9%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
              6. +-commutative77.9%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)}\right) \cdot R \]
              7. *-commutative77.9%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
              8. fma-udef78.0%

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

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

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)}\right)\right)\right) \cdot R \]
              2. sub-neg78.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              3. neg-mul-178.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              4. neg-mul-178.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{\left(-\lambda_2\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              5. remove-double-neg78.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              6. mul-1-neg78.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              7. distribute-neg-in78.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(-\left(-1 \cdot \lambda_1 + \lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              8. +-commutative78.0%

                \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(-\color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
              9. *-commutative78.0%

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

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

            if -6.6e12 < phi1 < 0.26000000000000001

            1. Initial program 66.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. Taylor expanded in phi1 around 0 64.6%

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

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

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

              \[\leadsto \cos^{-1} \left(\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 \]

            if 0.26000000000000001 < phi1

            1. Initial program 77.4%

              \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            2. Step-by-step derivation
              1. Simplified77.6%

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

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

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

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

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

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

                  \[\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. cos-diff77.4%

                  \[\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 \]
                5. +-commutative77.4%

                  \[\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 \]
                6. *-commutative77.4%

                  \[\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 \]
                7. fma-udef77.5%

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

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

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

              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.26:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)}\right)\\ \end{array} \]

            Alternative 6: 83.9% accurate, 0.7× speedup?

            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.056:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \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)\\ \end{array} \end{array} \]
            (FPCore (R lambda1 lambda2 phi1 phi2)
             :precision binary64
             (if (<= phi1 -6600000000000.0)
               (*
                R
                (-
                 (/ PI 2.0)
                 (asin
                  (fma
                   (sin phi1)
                   (sin phi2)
                   (* (cos phi2) (* (cos phi1) (cos (- lambda2 lambda1))))))))
               (if (<= phi1 0.056)
                 (*
                  R
                  (acos
                   (+
                    (*
                     (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2)))
                     (* (cos phi1) (cos phi2)))
                    (* phi1 (sin phi2)))))
                 (*
                  R
                  (acos
                   (+
                    (* (sin phi1) (sin phi2))
                    (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))))))
            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
            	double tmp;
            	if (phi1 <= -6600000000000.0) {
            		tmp = R * ((((double) M_PI) / 2.0) - asin(fma(sin(phi1), sin(phi2), (cos(phi2) * (cos(phi1) * cos((lambda2 - lambda1)))))));
            	} else if (phi1 <= 0.056) {
            		tmp = R * acos(((((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))) * (cos(phi1) * cos(phi2))) + (phi1 * sin(phi2))));
            	} else {
            		tmp = R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
            	}
            	return tmp;
            }
            
            function code(R, lambda1, lambda2, phi1, phi2)
            	tmp = 0.0
            	if (phi1 <= -6600000000000.0)
            		tmp = Float64(R * Float64(Float64(pi / 2.0) - asin(fma(sin(phi1), sin(phi2), Float64(cos(phi2) * Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))))));
            	elseif (phi1 <= 0.056)
            		tmp = Float64(R * acos(Float64(Float64(Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda1) * cos(lambda2))) * Float64(cos(phi1) * cos(phi2))) + Float64(phi1 * sin(phi2)))));
            	else
            		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))));
            	end
            	return tmp
            end
            
            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -6600000000000.0], N[(R * N[(N[(Pi / 2.0), $MachinePrecision] - N[ArcSin[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.056], N[(R * N[ArcCos[N[(N[(N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
            
            \begin{array}{l}
            
            \\
            \begin{array}{l}
            \mathbf{if}\;\phi_1 \leq -6600000000000:\\
            \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\
            
            \mathbf{elif}\;\phi_1 \leq 0.056:\\
            \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\
            
            \mathbf{else}:\\
            \;\;\;\;R \cdot \cos^{-1} \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)\\
            
            
            \end{array}
            \end{array}
            
            Derivation
            1. Split input into 3 regimes
            2. if phi1 < -6.6e12

              1. Initial program 77.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. Step-by-step derivation
                1. Simplified78.0%

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

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

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

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

                    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right)\right)} \cdot R \]
                  2. fma-udef99.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \color{blue}{\left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)}\right) \cdot R \]
                  3. associate-*r*98.9%

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

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
                  5. cos-diff77.9%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
                  6. +-commutative77.9%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)}\right) \cdot R \]
                  7. *-commutative77.9%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-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)\right) \cdot R \]
                  8. fma-udef78.0%

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

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

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2\right)}\right)\right)\right) \cdot R \]
                  2. sub-neg78.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  3. neg-mul-178.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  4. neg-mul-178.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\lambda_1 + \color{blue}{\left(-\lambda_2\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  5. remove-double-neg78.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  6. mul-1-neg78.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  7. distribute-neg-in78.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \color{blue}{\left(-\left(-1 \cdot \lambda_1 + \lambda_2\right)\right)} \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  8. +-commutative78.0%

                    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \left(-\color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}\right) \cdot \cos \phi_2\right)\right)\right)\right) \cdot R \]
                  9. *-commutative78.0%

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

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

                if -6.6e12 < phi1 < 0.0560000000000000012

                1. Initial program 66.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. Taylor expanded in phi1 around 0 64.6%

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

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

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

                  \[\leadsto \cos^{-1} \left(\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 \]

                if 0.0560000000000000012 < phi1

                1. Initial program 77.4%

                  \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                2. Taylor expanded in phi1 around 0 77.6%

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

                \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -6600000000000:\\ \;\;\;\;R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 0.056:\\ \;\;\;\;R \cdot \cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \phi_1 \cdot \sin \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \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)\\ \end{array} \]

              Alternative 7: 69.6% accurate, 0.9× speedup?

              \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\lambda_1 \leq 1.32 \cdot 10^{+26}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\ \end{array} \end{array} \]
              (FPCore (R lambda1 lambda2 phi1 phi2)
               :precision binary64
               (if (<= lambda1 1.32e+26)
                 (*
                  R
                  (acos
                   (fma
                    (sin phi1)
                    (sin phi2)
                    (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))
                 (*
                  R
                  (acos
                   (+
                    (* phi1 (sin phi2))
                    (*
                     (cos phi1)
                     (+
                      (* (sin lambda1) (sin lambda2))
                      (* (cos lambda1) (cos lambda2)))))))))
              double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
              	double tmp;
              	if (lambda1 <= 1.32e+26) {
              		tmp = R * acos(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
              	} else {
              		tmp = R * acos(((phi1 * sin(phi2)) + (cos(phi1) * ((sin(lambda1) * sin(lambda2)) + (cos(lambda1) * cos(lambda2))))));
              	}
              	return tmp;
              }
              
              function code(R, lambda1, lambda2, phi1, phi2)
              	tmp = 0.0
              	if (lambda1 <= 1.32e+26)
              		tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))));
              	else
              		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(cos(phi1) * Float64(Float64(sin(lambda1) * sin(lambda2)) + Float64(cos(lambda1) * cos(lambda2)))))));
              	end
              	return tmp
              end
              
              code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[lambda1, 1.32e+26], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
              
              \begin{array}{l}
              
              \\
              \begin{array}{l}
              \mathbf{if}\;\lambda_1 \leq 1.32 \cdot 10^{+26}:\\
              \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)\\
              
              \mathbf{else}:\\
              \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
              
              
              \end{array}
              \end{array}
              
              Derivation
              1. Split input into 2 regimes
              2. if lambda1 < 1.32e26

                1. Initial program 78.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. Step-by-step derivation
                  1. Simplified78.9%

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

                  if 1.32e26 < lambda1

                  1. Initial program 56.4%

                    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                  2. Taylor expanded in phi1 around 0 39.7%

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

                    \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                  4. Step-by-step derivation
                    1. sub-neg32.8%

                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R \]
                    2. remove-double-neg32.8%

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

                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right) \cdot R \]
                    4. distribute-neg-in32.8%

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

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

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

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

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

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

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

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

                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right) \cdot R \]
                    4. log1p-expm1-u50.0%

                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\right)\right) \cdot R \]
                    5. +-commutative50.0%

                      \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \color{blue}{\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) + \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot R \]
                    6. log1p-expm1-u50.0%

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

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

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

                Alternative 8: 74.0% accurate, 0.9× speedup?

                \[\begin{array}{l} \\ R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right) \end{array} \]
                (FPCore (R lambda1 lambda2 phi1 phi2)
                 :precision binary64
                 (*
                  R
                  (acos
                   (fma
                    (sin phi1)
                    (sin phi2)
                    (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))))
                double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                	return R * acos(fma(sin(phi1), sin(phi2), (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
                }
                
                function code(R, lambda1, lambda2, phi1, phi2)
                	return Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))))
                end
                
                code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
                
                \begin{array}{l}
                
                \\
                R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\right)
                \end{array}
                
                Derivation
                1. Initial program 72.3%

                  \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                2. Step-by-step derivation
                  1. Simplified72.4%

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

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

                  Alternative 9: 58.4% accurate, 1.0× speedup?

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

                    1. Initial program 77.7%

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

                      \[\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 0.00949999999999999976 < lambda2 < 2.59999999999999991e176

                    1. Initial program 53.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. Step-by-step derivation
                      1. Simplified53.8%

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

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

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

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

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

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

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

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

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

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

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

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

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

                      if 2.59999999999999991e176 < lambda2

                      1. Initial program 67.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. Step-by-step derivation
                        1. Simplified67.1%

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

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

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

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

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

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

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

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

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

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

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

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

                      Alternative 10: 62.8% accurate, 1.0× speedup?

                      \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \phi_1 \cdot \cos \phi_2\\ t_1 := \sin \phi_1 \cdot \sin \phi_2\\ \mathbf{if}\;\lambda_1 \leq -2100:\\ \;\;\;\;R \cdot \cos^{-1} \left(t_1 + \cos \lambda_1 \cdot t_0\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(t_1 + \cos \lambda_2 \cdot t_0\right)\\ \end{array} \end{array} \]
                      (FPCore (R lambda1 lambda2 phi1 phi2)
                       :precision binary64
                       (let* ((t_0 (* (cos phi1) (cos phi2))) (t_1 (* (sin phi1) (sin phi2))))
                         (if (<= lambda1 -2100.0)
                           (* R (acos (+ t_1 (* (cos lambda1) t_0))))
                           (* R (acos (+ t_1 (* (cos lambda2) t_0)))))))
                      double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                      	double t_0 = cos(phi1) * cos(phi2);
                      	double t_1 = sin(phi1) * sin(phi2);
                      	double tmp;
                      	if (lambda1 <= -2100.0) {
                      		tmp = R * acos((t_1 + (cos(lambda1) * t_0)));
                      	} else {
                      		tmp = R * acos((t_1 + (cos(lambda2) * t_0)));
                      	}
                      	return tmp;
                      }
                      
                      real(8) function code(r, lambda1, lambda2, phi1, phi2)
                          real(8), intent (in) :: r
                          real(8), intent (in) :: lambda1
                          real(8), intent (in) :: lambda2
                          real(8), intent (in) :: phi1
                          real(8), intent (in) :: phi2
                          real(8) :: t_0
                          real(8) :: t_1
                          real(8) :: tmp
                          t_0 = cos(phi1) * cos(phi2)
                          t_1 = sin(phi1) * sin(phi2)
                          if (lambda1 <= (-2100.0d0)) then
                              tmp = r * acos((t_1 + (cos(lambda1) * t_0)))
                          else
                              tmp = r * acos((t_1 + (cos(lambda2) * t_0)))
                          end if
                          code = tmp
                      end function
                      
                      public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                      	double t_0 = Math.cos(phi1) * Math.cos(phi2);
                      	double t_1 = Math.sin(phi1) * Math.sin(phi2);
                      	double tmp;
                      	if (lambda1 <= -2100.0) {
                      		tmp = R * Math.acos((t_1 + (Math.cos(lambda1) * t_0)));
                      	} else {
                      		tmp = R * Math.acos((t_1 + (Math.cos(lambda2) * t_0)));
                      	}
                      	return tmp;
                      }
                      
                      def code(R, lambda1, lambda2, phi1, phi2):
                      	t_0 = math.cos(phi1) * math.cos(phi2)
                      	t_1 = math.sin(phi1) * math.sin(phi2)
                      	tmp = 0
                      	if lambda1 <= -2100.0:
                      		tmp = R * math.acos((t_1 + (math.cos(lambda1) * t_0)))
                      	else:
                      		tmp = R * math.acos((t_1 + (math.cos(lambda2) * t_0)))
                      	return tmp
                      
                      function code(R, lambda1, lambda2, phi1, phi2)
                      	t_0 = Float64(cos(phi1) * cos(phi2))
                      	t_1 = Float64(sin(phi1) * sin(phi2))
                      	tmp = 0.0
                      	if (lambda1 <= -2100.0)
                      		tmp = Float64(R * acos(Float64(t_1 + Float64(cos(lambda1) * t_0))));
                      	else
                      		tmp = Float64(R * acos(Float64(t_1 + Float64(cos(lambda2) * t_0))));
                      	end
                      	return tmp
                      end
                      
                      function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                      	t_0 = cos(phi1) * cos(phi2);
                      	t_1 = sin(phi1) * sin(phi2);
                      	tmp = 0.0;
                      	if (lambda1 <= -2100.0)
                      		tmp = R * acos((t_1 + (cos(lambda1) * t_0)));
                      	else
                      		tmp = R * acos((t_1 + (cos(lambda2) * t_0)));
                      	end
                      	tmp_2 = tmp;
                      end
                      
                      code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[lambda1, -2100.0], N[(R * N[ArcCos[N[(t$95$1 + N[(N[Cos[lambda1], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(t$95$1 + N[(N[Cos[lambda2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
                      
                      \begin{array}{l}
                      
                      \\
                      \begin{array}{l}
                      t_0 := \cos \phi_1 \cdot \cos \phi_2\\
                      t_1 := \sin \phi_1 \cdot \sin \phi_2\\
                      \mathbf{if}\;\lambda_1 \leq -2100:\\
                      \;\;\;\;R \cdot \cos^{-1} \left(t_1 + \cos \lambda_1 \cdot t_0\right)\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;R \cdot \cos^{-1} \left(t_1 + \cos \lambda_2 \cdot t_0\right)\\
                      
                      
                      \end{array}
                      \end{array}
                      
                      Derivation
                      1. Split input into 2 regimes
                      2. if lambda1 < -2100

                        1. Initial program 56.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. Taylor expanded in lambda2 around 0 56.2%

                          \[\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 -2100 < lambda1

                        1. Initial program 77.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. Taylor expanded in lambda1 around 0 61.4%

                          \[\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\right)}\right) \cdot R \]
                        3. Step-by-step derivation
                          1. cos-neg61.4%

                            \[\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_2}\right) \cdot R \]
                        4. Simplified61.4%

                          \[\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_2}\right) \cdot R \]
                      3. Recombined 2 regimes into one program.
                      4. Final simplification60.2%

                        \[\leadsto \begin{array}{l} \mathbf{if}\;\lambda_1 \leq -2100:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \lambda_2 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\\ \end{array} \]

                      Alternative 11: 74.0% accurate, 1.0× speedup?

                      \[\begin{array}{l} \\ R \cdot \cos^{-1} \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) \end{array} \]
                      (FPCore (R lambda1 lambda2 phi1 phi2)
                       :precision binary64
                       (*
                        R
                        (acos
                         (+
                          (* (sin phi1) (sin phi2))
                          (* (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2))))))))
                      double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                      	return R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
                      }
                      
                      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 = r * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))))
                      end function
                      
                      public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                      	return R * Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + (Math.cos(phi1) * (Math.cos(phi2) * Math.cos((lambda1 - lambda2))))));
                      }
                      
                      def code(R, lambda1, lambda2, phi1, phi2):
                      	return R * math.acos(((math.sin(phi1) * math.sin(phi2)) + (math.cos(phi1) * (math.cos(phi2) * math.cos((lambda1 - lambda2))))))
                      
                      function code(R, lambda1, lambda2, phi1, phi2)
                      	return Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda1 - lambda2)))))))
                      end
                      
                      function tmp = code(R, lambda1, lambda2, phi1, phi2)
                      	tmp = R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * (cos(phi2) * cos((lambda1 - lambda2))))));
                      end
                      
                      code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
                      
                      \begin{array}{l}
                      
                      \\
                      R \cdot \cos^{-1} \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)
                      \end{array}
                      
                      Derivation
                      1. Initial program 72.3%

                        \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                      2. Taylor expanded in phi1 around 0 72.4%

                        \[\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 \]
                      3. Final simplification72.4%

                        \[\leadsto R \cdot \cos^{-1} \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) \]

                      Alternative 12: 55.8% accurate, 1.0× speedup?

                      \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ \mathbf{if}\;\phi_1 \leq -0.0025:\\ \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot t_0\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot t_0\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\ \end{array} \end{array} \]
                      (FPCore (R lambda1 lambda2 phi1 phi2)
                       :precision binary64
                       (let* ((t_0 (cos (- lambda2 lambda1))))
                         (if (<= phi1 -0.0025)
                           (* R (acos (fma (sin phi1) (sin phi2) (* (cos phi1) t_0))))
                           (if (<= phi1 3.4e-10)
                             (*
                              R
                              (acos
                               (+
                                (* phi1 (sin phi2))
                                (* (* (cos phi2) t_0) (+ (* -0.5 (* phi1 phi1)) 1.0)))))
                             (* R (acos (+ (* (sin phi1) (sin phi2)) (* (cos phi1) (cos phi2)))))))))
                      double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                      	double t_0 = cos((lambda2 - lambda1));
                      	double tmp;
                      	if (phi1 <= -0.0025) {
                      		tmp = R * acos(fma(sin(phi1), sin(phi2), (cos(phi1) * t_0)));
                      	} else if (phi1 <= 3.4e-10) {
                      		tmp = R * acos(((phi1 * sin(phi2)) + ((cos(phi2) * t_0) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                      	} else {
                      		tmp = R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * cos(phi2))));
                      	}
                      	return tmp;
                      }
                      
                      function code(R, lambda1, lambda2, phi1, phi2)
                      	t_0 = cos(Float64(lambda2 - lambda1))
                      	tmp = 0.0
                      	if (phi1 <= -0.0025)
                      		tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * t_0))));
                      	elseif (phi1 <= 3.4e-10)
                      		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(Float64(cos(phi2) * t_0) * Float64(Float64(-0.5 * Float64(phi1 * phi1)) + 1.0)))));
                      	else
                      		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(phi1) * cos(phi2)))));
                      	end
                      	return tmp
                      end
                      
                      code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -0.0025], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.4e-10], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] * N[(N[(-0.5 * N[(phi1 * phi1), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
                      
                      \begin{array}{l}
                      
                      \\
                      \begin{array}{l}
                      t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
                      \mathbf{if}\;\phi_1 \leq -0.0025:\\
                      \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot t_0\right)\right)\\
                      
                      \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\
                      \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot t_0\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\
                      
                      
                      \end{array}
                      \end{array}
                      
                      Derivation
                      1. Split input into 3 regimes
                      2. if phi1 < -0.00250000000000000005

                        1. Initial program 77.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. Step-by-step derivation
                          1. Simplified78.0%

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

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

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R \]
                            2. remove-double-neg47.0%

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

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

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

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

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

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

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

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

                          if -0.00250000000000000005 < phi1 < 3.40000000000000015e-10

                          1. Initial program 67.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. Taylor expanded in phi1 around 0 67.6%

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

                            \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot \left({\phi_1}^{2} \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                          4. Step-by-step derivation
                            1. associate-*r*67.6%

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\left(-0.5 \cdot {\phi_1}^{2}\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                            2. distribute-lft1-in67.6%

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot {\phi_1}^{2} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                            3. unpow267.6%

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \color{blue}{\left(\phi_1 \cdot \phi_1\right)} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                            4. sub-neg67.6%

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R \]
                            5. remove-double-neg67.6%

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

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

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

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

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \color{blue}{\cos \left(\lambda_2 + -1 \cdot \lambda_1\right)}\right)\right) \cdot R \]
                            10. mul-1-neg67.6%

                              \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right)\right)\right) \cdot R \]
                            11. unsub-neg67.6%

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

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

                          if 3.40000000000000015e-10 < phi1

                          1. Initial program 74.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. Step-by-step derivation
                            1. *-commutative74.8%

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

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

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

                              \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                            5. *-commutative74.8%

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

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

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

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

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
                        3. Recombined 3 regimes into one program.
                        4. Final simplification54.1%

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

                        Alternative 13: 50.2% accurate, 1.0× speedup?

                        \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ \mathbf{if}\;\phi_2 \leq 2.3 \cdot 10^{-14}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot t_0\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot t_0\right)\right)\\ \end{array} \end{array} \]
                        (FPCore (R lambda1 lambda2 phi1 phi2)
                         :precision binary64
                         (let* ((t_0 (cos (- lambda2 lambda1))))
                           (if (<= phi2 2.3e-14)
                             (* R (acos (fma (sin phi1) (sin phi2) (* (cos phi1) t_0))))
                             (* R (acos (fma (sin phi1) (sin phi2) (* (cos phi2) t_0)))))))
                        double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                        	double t_0 = cos((lambda2 - lambda1));
                        	double tmp;
                        	if (phi2 <= 2.3e-14) {
                        		tmp = R * acos(fma(sin(phi1), sin(phi2), (cos(phi1) * t_0)));
                        	} else {
                        		tmp = R * acos(fma(sin(phi1), sin(phi2), (cos(phi2) * t_0)));
                        	}
                        	return tmp;
                        }
                        
                        function code(R, lambda1, lambda2, phi1, phi2)
                        	t_0 = cos(Float64(lambda2 - lambda1))
                        	tmp = 0.0
                        	if (phi2 <= 2.3e-14)
                        		tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi1) * t_0))));
                        	else
                        		tmp = Float64(R * acos(fma(sin(phi1), sin(phi2), Float64(cos(phi2) * t_0))));
                        	end
                        	return tmp
                        end
                        
                        code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi2, 2.3e-14], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
                        
                        \begin{array}{l}
                        
                        \\
                        \begin{array}{l}
                        t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
                        \mathbf{if}\;\phi_2 \leq 2.3 \cdot 10^{-14}:\\
                        \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot t_0\right)\right)\\
                        
                        \mathbf{else}:\\
                        \;\;\;\;R \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_2 \cdot t_0\right)\right)\\
                        
                        
                        \end{array}
                        \end{array}
                        
                        Derivation
                        1. Split input into 2 regimes
                        2. if phi2 < 2.29999999999999998e-14

                          1. Initial program 72.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. Step-by-step derivation
                            1. Simplified72.9%

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

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

                                \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R \]
                              2. remove-double-neg51.0%

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

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

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

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

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

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

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

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

                            if 2.29999999999999998e-14 < phi2

                            1. Initial program 70.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. Step-by-step derivation
                              1. Simplified70.8%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                            Alternative 14: 53.2% accurate, 1.2× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \phi_1 \cdot \cos \phi_2\\ \mathbf{if}\;\phi_1 \leq -4.8 \cdot 10^{+76}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + t_0 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + t_0\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (let* ((t_0 (* (cos phi1) (cos phi2))))
                               (if (<= phi1 -4.8e+76)
                                 (* R (acos (* (cos phi1) (cos lambda1))))
                                 (if (<= phi1 3.4e-10)
                                   (* R (acos (+ (* phi1 (sin phi2)) (* t_0 (cos (- lambda1 lambda2))))))
                                   (* R (acos (+ (* (sin phi1) (sin phi2)) t_0)))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = cos(phi1) * cos(phi2);
                            	double tmp;
                            	if (phi1 <= -4.8e+76) {
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	} else if (phi1 <= 3.4e-10) {
                            		tmp = R * acos(((phi1 * sin(phi2)) + (t_0 * cos((lambda1 - lambda2)))));
                            	} else {
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + t_0));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: t_0
                                real(8) :: tmp
                                t_0 = cos(phi1) * cos(phi2)
                                if (phi1 <= (-4.8d+76)) then
                                    tmp = r * acos((cos(phi1) * cos(lambda1)))
                                else if (phi1 <= 3.4d-10) then
                                    tmp = r * acos(((phi1 * sin(phi2)) + (t_0 * cos((lambda1 - lambda2)))))
                                else
                                    tmp = r * acos(((sin(phi1) * sin(phi2)) + t_0))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = Math.cos(phi1) * Math.cos(phi2);
                            	double tmp;
                            	if (phi1 <= -4.8e+76) {
                            		tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	} else if (phi1 <= 3.4e-10) {
                            		tmp = R * Math.acos(((phi1 * Math.sin(phi2)) + (t_0 * Math.cos((lambda1 - lambda2)))));
                            	} else {
                            		tmp = R * Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + t_0));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	t_0 = math.cos(phi1) * math.cos(phi2)
                            	tmp = 0
                            	if phi1 <= -4.8e+76:
                            		tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	elif phi1 <= 3.4e-10:
                            		tmp = R * math.acos(((phi1 * math.sin(phi2)) + (t_0 * math.cos((lambda1 - lambda2)))))
                            	else:
                            		tmp = R * math.acos(((math.sin(phi1) * math.sin(phi2)) + t_0))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = Float64(cos(phi1) * cos(phi2))
                            	tmp = 0.0
                            	if (phi1 <= -4.8e+76)
                            		tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))));
                            	elseif (phi1 <= 3.4e-10)
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(t_0 * cos(Float64(lambda1 - lambda2))))));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + t_0)));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = cos(phi1) * cos(phi2);
                            	tmp = 0.0;
                            	if (phi1 <= -4.8e+76)
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	elseif (phi1 <= 3.4e-10)
                            		tmp = R * acos(((phi1 * sin(phi2)) + (t_0 * cos((lambda1 - lambda2)))));
                            	else
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + t_0));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -4.8e+76], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.4e-10], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(t$95$0 * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            t_0 := \cos \phi_1 \cdot \cos \phi_2\\
                            \mathbf{if}\;\phi_1 \leq -4.8 \cdot 10^{+76}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            
                            \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + t_0 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + t_0\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 3 regimes
                            2. if phi1 < -4.8e76

                              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. Step-by-step derivation
                                1. *-commutative74.5%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative74.5%

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

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

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

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

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

                              if -4.8e76 < phi1 < 3.40000000000000015e-10

                              1. Initial program 70.2%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0 64.9%

                                \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]

                              if 3.40000000000000015e-10 < phi1

                              1. Initial program 74.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. Step-by-step derivation
                                1. *-commutative74.8%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative74.8%

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

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

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

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

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
                            3. Recombined 3 regimes into one program.
                            4. Final simplification51.6%

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -4.8 \cdot 10^{+76}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\ \end{array} \]

                            Alternative 15: 53.5% accurate, 1.2× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \phi_1 \cdot \cos \phi_2\\ t_1 := t_0 \cdot \cos \left(\lambda_1 - \lambda_2\right)\\ \mathbf{if}\;\phi_1 \leq -1 \cdot 10^{+47}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \phi_2 + t_1\right)\\ \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + t_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + t_0\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (let* ((t_0 (* (cos phi1) (cos phi2)))
                                    (t_1 (* t_0 (cos (- lambda1 lambda2)))))
                               (if (<= phi1 -1e+47)
                                 (* R (acos (+ (* (sin phi1) phi2) t_1)))
                                 (if (<= phi1 3.4e-10)
                                   (* R (acos (+ (* phi1 (sin phi2)) t_1)))
                                   (* R (acos (+ (* (sin phi1) (sin phi2)) t_0)))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = cos(phi1) * cos(phi2);
                            	double t_1 = t_0 * cos((lambda1 - lambda2));
                            	double tmp;
                            	if (phi1 <= -1e+47) {
                            		tmp = R * acos(((sin(phi1) * phi2) + t_1));
                            	} else if (phi1 <= 3.4e-10) {
                            		tmp = R * acos(((phi1 * sin(phi2)) + t_1));
                            	} else {
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + t_0));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: t_0
                                real(8) :: t_1
                                real(8) :: tmp
                                t_0 = cos(phi1) * cos(phi2)
                                t_1 = t_0 * cos((lambda1 - lambda2))
                                if (phi1 <= (-1d+47)) then
                                    tmp = r * acos(((sin(phi1) * phi2) + t_1))
                                else if (phi1 <= 3.4d-10) then
                                    tmp = r * acos(((phi1 * sin(phi2)) + t_1))
                                else
                                    tmp = r * acos(((sin(phi1) * sin(phi2)) + t_0))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = Math.cos(phi1) * Math.cos(phi2);
                            	double t_1 = t_0 * Math.cos((lambda1 - lambda2));
                            	double tmp;
                            	if (phi1 <= -1e+47) {
                            		tmp = R * Math.acos(((Math.sin(phi1) * phi2) + t_1));
                            	} else if (phi1 <= 3.4e-10) {
                            		tmp = R * Math.acos(((phi1 * Math.sin(phi2)) + t_1));
                            	} else {
                            		tmp = R * Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + t_0));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	t_0 = math.cos(phi1) * math.cos(phi2)
                            	t_1 = t_0 * math.cos((lambda1 - lambda2))
                            	tmp = 0
                            	if phi1 <= -1e+47:
                            		tmp = R * math.acos(((math.sin(phi1) * phi2) + t_1))
                            	elif phi1 <= 3.4e-10:
                            		tmp = R * math.acos(((phi1 * math.sin(phi2)) + t_1))
                            	else:
                            		tmp = R * math.acos(((math.sin(phi1) * math.sin(phi2)) + t_0))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = Float64(cos(phi1) * cos(phi2))
                            	t_1 = Float64(t_0 * cos(Float64(lambda1 - lambda2)))
                            	tmp = 0.0
                            	if (phi1 <= -1e+47)
                            		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * phi2) + t_1)));
                            	elseif (phi1 <= 3.4e-10)
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + t_1)));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + t_0)));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = cos(phi1) * cos(phi2);
                            	t_1 = t_0 * cos((lambda1 - lambda2));
                            	tmp = 0.0;
                            	if (phi1 <= -1e+47)
                            		tmp = R * acos(((sin(phi1) * phi2) + t_1));
                            	elseif (phi1 <= 3.4e-10)
                            		tmp = R * acos(((phi1 * sin(phi2)) + t_1));
                            	else
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + t_0));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi1, -1e+47], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * phi2), $MachinePrecision] + t$95$1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.4e-10], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            t_0 := \cos \phi_1 \cdot \cos \phi_2\\
                            t_1 := t_0 \cdot \cos \left(\lambda_1 - \lambda_2\right)\\
                            \mathbf{if}\;\phi_1 \leq -1 \cdot 10^{+47}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \phi_2 + t_1\right)\\
                            
                            \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + t_1\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + t_0\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 3 regimes
                            2. if phi1 < -1e47

                              1. Initial program 75.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. Taylor expanded in phi2 around 0 36.5%

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

                              if -1e47 < phi1 < 3.40000000000000015e-10

                              1. Initial program 69.4%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0 65.6%

                                \[\leadsto \cos^{-1} \left(\color{blue}{\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 \]

                              if 3.40000000000000015e-10 < phi1

                              1. Initial program 74.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. Step-by-step derivation
                                1. *-commutative74.8%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative74.8%

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

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

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

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

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right)} \cdot R \]
                            3. Recombined 3 regimes into one program.
                            4. Final simplification51.4%

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -1 \cdot 10^{+47}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\\ \mathbf{elif}\;\phi_1 \leq 3.4 \cdot 10^{-10}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\ \end{array} \]

                            Alternative 16: 53.7% accurate, 1.2× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.48 \lor \neg \left(\phi_1 \leq 3.4 \cdot 10^{-10}\right):\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (if (or (<= phi1 -0.48) (not (<= phi1 3.4e-10)))
                               (* R (acos (+ (* (sin phi1) (sin phi2)) (* (cos phi1) (cos phi2)))))
                               (*
                                R
                                (acos
                                 (+
                                  (* phi1 (sin phi2))
                                  (*
                                   (* (cos phi2) (cos (- lambda2 lambda1)))
                                   (+ (* -0.5 (* phi1 phi1)) 1.0)))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if ((phi1 <= -0.48) || !(phi1 <= 3.4e-10)) {
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * cos(phi2))));
                            	} else {
                            		tmp = R * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: tmp
                                if ((phi1 <= (-0.48d0)) .or. (.not. (phi1 <= 3.4d-10))) then
                                    tmp = r * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * cos(phi2))))
                                else
                                    tmp = r * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * (((-0.5d0) * (phi1 * phi1)) + 1.0d0))))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if ((phi1 <= -0.48) || !(phi1 <= 3.4e-10)) {
                            		tmp = R * Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + (Math.cos(phi1) * Math.cos(phi2))));
                            	} else {
                            		tmp = R * Math.acos(((phi1 * Math.sin(phi2)) + ((Math.cos(phi2) * Math.cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	tmp = 0
                            	if (phi1 <= -0.48) or not (phi1 <= 3.4e-10):
                            		tmp = R * math.acos(((math.sin(phi1) * math.sin(phi2)) + (math.cos(phi1) * math.cos(phi2))))
                            	else:
                            		tmp = R * math.acos(((phi1 * math.sin(phi2)) + ((math.cos(phi2) * math.cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0
                            	if ((phi1 <= -0.48) || !(phi1 <= 3.4e-10))
                            		tmp = Float64(R * acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(cos(phi1) * cos(phi2)))));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))) * Float64(Float64(-0.5 * Float64(phi1 * phi1)) + 1.0)))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0;
                            	if ((phi1 <= -0.48) || ~((phi1 <= 3.4e-10)))
                            		tmp = R * acos(((sin(phi1) * sin(phi2)) + (cos(phi1) * cos(phi2))));
                            	else
                            		tmp = R * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi1, -0.48], N[Not[LessEqual[phi1, 3.4e-10]], $MachinePrecision]], N[(R * N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(-0.5 * N[(phi1 * phi1), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            \mathbf{if}\;\phi_1 \leq -0.48 \lor \neg \left(\phi_1 \leq 3.4 \cdot 10^{-10}\right):\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 2 regimes
                            2. if phi1 < -0.47999999999999998 or 3.40000000000000015e-10 < phi1

                              1. Initial program 76.4%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Step-by-step derivation
                                1. *-commutative76.4%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative76.4%

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

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

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

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

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

                              if -0.47999999999999998 < phi1 < 3.40000000000000015e-10

                              1. Initial program 67.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. Taylor expanded in phi1 around 0 67.6%

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot \left({\phi_1}^{2} \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                              4. Step-by-step derivation
                                1. associate-*r*67.6%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\left(-0.5 \cdot {\phi_1}^{2}\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                                2. distribute-lft1-in67.6%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot {\phi_1}^{2} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                                3. unpow267.6%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \color{blue}{\left(\phi_1 \cdot \phi_1\right)} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                                4. sub-neg67.6%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R \]
                                5. remove-double-neg67.6%

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

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

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

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \color{blue}{\cos \left(\lambda_2 + -1 \cdot \lambda_1\right)}\right)\right) \cdot R \]
                                10. mul-1-neg67.6%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right)\right)\right) \cdot R \]
                                11. unsub-neg67.6%

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

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.48 \lor \neg \left(\phi_1 \leq 3.4 \cdot 10^{-10}\right):\\ \;\;\;\;R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \phi_2\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\ \end{array} \]

                            Alternative 17: 43.7% accurate, 1.5× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.075:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (if (<= phi1 -0.075)
                               (* R (acos (* (cos phi1) (cos lambda1))))
                               (*
                                R
                                (acos
                                 (+
                                  (* phi1 (sin phi2))
                                  (*
                                   (* (cos phi2) (cos (- lambda2 lambda1)))
                                   (+ (* -0.5 (* phi1 phi1)) 1.0)))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -0.075) {
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	} else {
                            		tmp = R * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: tmp
                                if (phi1 <= (-0.075d0)) then
                                    tmp = r * acos((cos(phi1) * cos(lambda1)))
                                else
                                    tmp = r * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * (((-0.5d0) * (phi1 * phi1)) + 1.0d0))))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -0.075) {
                            		tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	} else {
                            		tmp = R * Math.acos(((phi1 * Math.sin(phi2)) + ((Math.cos(phi2) * Math.cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	tmp = 0
                            	if phi1 <= -0.075:
                            		tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	else:
                            		tmp = R * math.acos(((phi1 * math.sin(phi2)) + ((math.cos(phi2) * math.cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0
                            	if (phi1 <= -0.075)
                            		tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))) * Float64(Float64(-0.5 * Float64(phi1 * phi1)) + 1.0)))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0;
                            	if (phi1 <= -0.075)
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	else
                            		tmp = R * acos(((phi1 * sin(phi2)) + ((cos(phi2) * cos((lambda2 - lambda1))) * ((-0.5 * (phi1 * phi1)) + 1.0))));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -0.075], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[(-0.5 * N[(phi1 * phi1), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            \mathbf{if}\;\phi_1 \leq -0.075:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 2 regimes
                            2. if phi1 < -0.0749999999999999972

                              1. Initial program 77.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. Step-by-step derivation
                                1. *-commutative77.9%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative77.9%

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

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

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

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

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

                              if -0.0749999999999999972 < phi1

                              1. Initial program 70.2%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0 50.8%

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot \left({\phi_1}^{2} \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                              4. Step-by-step derivation
                                1. associate-*r*44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\left(-0.5 \cdot {\phi_1}^{2}\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                                2. distribute-lft1-in44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\left(-0.5 \cdot {\phi_1}^{2} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)}\right) \cdot R \]
                                3. unpow244.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \color{blue}{\left(\phi_1 \cdot \phi_1\right)} + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                                4. sub-neg44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R \]
                                5. remove-double-neg44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right)\right)\right) \cdot R \]
                                6. mul-1-neg44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right)\right) \cdot R \]
                                7. distribute-neg-in44.2%

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(-\color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)}\right)\right)\right) \cdot R \]
                                9. cos-neg44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \color{blue}{\cos \left(\lambda_2 + -1 \cdot \lambda_1\right)}\right)\right) \cdot R \]
                                10. mul-1-neg44.2%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right) \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right)\right)\right) \cdot R \]
                                11. unsub-neg44.2%

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

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.075:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right) \cdot \left(-0.5 \cdot \left(\phi_1 \cdot \phi_1\right) + 1\right)\right)\\ \end{array} \]

                            Alternative 18: 44.5% accurate, 1.5× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.017:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (if (<= phi1 -0.017)
                               (* R (acos (* (cos phi1) (cos lambda1))))
                               (*
                                R
                                (acos (+ (* phi1 (sin phi2)) (* (cos phi2) (cos (- lambda2 lambda1))))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -0.017) {
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	} else {
                            		tmp = R * acos(((phi1 * sin(phi2)) + (cos(phi2) * cos((lambda2 - lambda1)))));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: tmp
                                if (phi1 <= (-0.017d0)) then
                                    tmp = r * acos((cos(phi1) * cos(lambda1)))
                                else
                                    tmp = r * acos(((phi1 * sin(phi2)) + (cos(phi2) * cos((lambda2 - lambda1)))))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -0.017) {
                            		tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	} else {
                            		tmp = R * Math.acos(((phi1 * Math.sin(phi2)) + (Math.cos(phi2) * Math.cos((lambda2 - lambda1)))));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	tmp = 0
                            	if phi1 <= -0.017:
                            		tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	else:
                            		tmp = R * math.acos(((phi1 * math.sin(phi2)) + (math.cos(phi2) * math.cos((lambda2 - lambda1)))))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0
                            	if (phi1 <= -0.017)
                            		tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * sin(phi2)) + Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0;
                            	if (phi1 <= -0.017)
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	else
                            		tmp = R * acos(((phi1 * sin(phi2)) + (cos(phi2) * cos((lambda2 - lambda1)))));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -0.017], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            \mathbf{if}\;\phi_1 \leq -0.017:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 2 regimes
                            2. if phi1 < -0.017000000000000001

                              1. Initial program 77.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. Step-by-step derivation
                                1. *-commutative77.9%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative77.9%

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

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

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

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

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

                              if -0.017000000000000001 < phi1

                              1. Initial program 70.2%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0 50.8%

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

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R \]
                                2. neg-mul-145.4%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_1 + \color{blue}{-1 \cdot \lambda_2}\right)\right) \cdot R \]
                                3. neg-mul-145.4%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_1 + \color{blue}{\left(-\lambda_2\right)}\right)\right) \cdot R \]
                                4. remove-double-neg45.4%

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right) \cdot R \]
                                6. distribute-neg-in45.4%

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

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

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_2 + \color{blue}{\left(-\lambda_1\right)}\right)\right) \cdot R \]
                                10. unsub-neg45.4%

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

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.017:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\ \end{array} \]

                            Alternative 19: 39.3% accurate, 1.9× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} t_0 := R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{if}\;\phi_2 \leq -6 \cdot 10^{-80}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;\phi_2 \leq 1.05 \cdot 10^{-90}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_1 \cdot \phi_2\right)\\ \mathbf{elif}\;\phi_2 \leq 2.3 \cdot 10^{-14}:\\ \;\;\;\;t_0\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (let* ((t_0 (* R (acos (* (cos phi1) (cos lambda1))))))
                               (if (<= phi2 -6e-80)
                                 t_0
                                 (if (<= phi2 1.05e-90)
                                   (* R (acos (+ (* (cos phi1) (cos (- lambda2 lambda1))) (* phi1 phi2))))
                                   (if (<= phi2 2.3e-14) t_0 (* R (acos (* (cos phi2) (cos lambda1)))))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = R * acos((cos(phi1) * cos(lambda1)));
                            	double tmp;
                            	if (phi2 <= -6e-80) {
                            		tmp = t_0;
                            	} else if (phi2 <= 1.05e-90) {
                            		tmp = R * acos(((cos(phi1) * cos((lambda2 - lambda1))) + (phi1 * phi2)));
                            	} else if (phi2 <= 2.3e-14) {
                            		tmp = t_0;
                            	} else {
                            		tmp = R * acos((cos(phi2) * cos(lambda1)));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: t_0
                                real(8) :: tmp
                                t_0 = r * acos((cos(phi1) * cos(lambda1)))
                                if (phi2 <= (-6d-80)) then
                                    tmp = t_0
                                else if (phi2 <= 1.05d-90) then
                                    tmp = r * acos(((cos(phi1) * cos((lambda2 - lambda1))) + (phi1 * phi2)))
                                else if (phi2 <= 2.3d-14) then
                                    tmp = t_0
                                else
                                    tmp = r * acos((cos(phi2) * cos(lambda1)))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double t_0 = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	double tmp;
                            	if (phi2 <= -6e-80) {
                            		tmp = t_0;
                            	} else if (phi2 <= 1.05e-90) {
                            		tmp = R * Math.acos(((Math.cos(phi1) * Math.cos((lambda2 - lambda1))) + (phi1 * phi2)));
                            	} else if (phi2 <= 2.3e-14) {
                            		tmp = t_0;
                            	} else {
                            		tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda1)));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	t_0 = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	tmp = 0
                            	if phi2 <= -6e-80:
                            		tmp = t_0
                            	elif phi2 <= 1.05e-90:
                            		tmp = R * math.acos(((math.cos(phi1) * math.cos((lambda2 - lambda1))) + (phi1 * phi2)))
                            	elif phi2 <= 2.3e-14:
                            		tmp = t_0
                            	else:
                            		tmp = R * math.acos((math.cos(phi2) * math.cos(lambda1)))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))))
                            	tmp = 0.0
                            	if (phi2 <= -6e-80)
                            		tmp = t_0;
                            	elseif (phi2 <= 1.05e-90)
                            		tmp = Float64(R * acos(Float64(Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))) + Float64(phi1 * phi2))));
                            	elseif (phi2 <= 2.3e-14)
                            		tmp = t_0;
                            	else
                            		tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda1))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	t_0 = R * acos((cos(phi1) * cos(lambda1)));
                            	tmp = 0.0;
                            	if (phi2 <= -6e-80)
                            		tmp = t_0;
                            	elseif (phi2 <= 1.05e-90)
                            		tmp = R * acos(((cos(phi1) * cos((lambda2 - lambda1))) + (phi1 * phi2)));
                            	elseif (phi2 <= 2.3e-14)
                            		tmp = t_0;
                            	else
                            		tmp = R * acos((cos(phi2) * cos(lambda1)));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[phi2, -6e-80], t$95$0, If[LessEqual[phi2, 1.05e-90], N[(R * N[ArcCos[N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[(phi1 * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 2.3e-14], t$95$0, N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            t_0 := R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            \mathbf{if}\;\phi_2 \leq -6 \cdot 10^{-80}:\\
                            \;\;\;\;t_0\\
                            
                            \mathbf{elif}\;\phi_2 \leq 1.05 \cdot 10^{-90}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_1 \cdot \phi_2\right)\\
                            
                            \mathbf{elif}\;\phi_2 \leq 2.3 \cdot 10^{-14}:\\
                            \;\;\;\;t_0\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 3 regimes
                            2. if phi2 < -6.00000000000000014e-80 or 1.05e-90 < phi2 < 2.29999999999999998e-14

                              1. Initial program 73.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. Step-by-step derivation
                                1. *-commutative73.6%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative73.6%

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

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

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

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

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

                              if -6.00000000000000014e-80 < phi2 < 1.05e-90

                              1. Initial program 72.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. Taylor expanded in phi1 around 0 59.7%

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

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R \]
                                2. remove-double-neg59.7%

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

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right) \cdot R \]
                                4. distribute-neg-in59.7%

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

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

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

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

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

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

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

                              if 2.29999999999999998e-14 < phi2

                              1. Initial program 70.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. Step-by-step derivation
                                1. *-commutative70.6%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative70.6%

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

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

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

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

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \lambda_1 \cdot \cos \phi_2\right)} \cdot R \]
                              6. Step-by-step derivation
                                1. *-commutative34.8%

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \cos \lambda_1\right)} \cdot R \]
                              7. Simplified34.8%

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq -6 \cdot 10^{-80}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{elif}\;\phi_2 \leq 1.05 \cdot 10^{-90}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \phi_1 \cdot \phi_2\right)\\ \mathbf{elif}\;\phi_2 \leq 2.3 \cdot 10^{-14}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\ \end{array} \]

                            Alternative 20: 35.3% accurate, 2.0× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.008 \lor \neg \left(\phi_1 \leq 1.35 \cdot 10^{-132}\right):\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot \left(1 + \phi_1 \cdot \left(\phi_1 \cdot -0.5\right)\right)\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (if (or (<= phi1 -0.008) (not (<= phi1 1.35e-132)))
                               (* R (acos (* (cos phi1) (cos lambda1))))
                               (*
                                R
                                (acos
                                 (+
                                  (* phi1 phi2)
                                  (* (cos (- lambda1 lambda2)) (+ 1.0 (* phi1 (* phi1 -0.5)))))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if ((phi1 <= -0.008) || !(phi1 <= 1.35e-132)) {
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	} else {
                            		tmp = R * acos(((phi1 * phi2) + (cos((lambda1 - lambda2)) * (1.0 + (phi1 * (phi1 * -0.5))))));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: tmp
                                if ((phi1 <= (-0.008d0)) .or. (.not. (phi1 <= 1.35d-132))) then
                                    tmp = r * acos((cos(phi1) * cos(lambda1)))
                                else
                                    tmp = r * acos(((phi1 * phi2) + (cos((lambda1 - lambda2)) * (1.0d0 + (phi1 * (phi1 * (-0.5d0)))))))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if ((phi1 <= -0.008) || !(phi1 <= 1.35e-132)) {
                            		tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	} else {
                            		tmp = R * Math.acos(((phi1 * phi2) + (Math.cos((lambda1 - lambda2)) * (1.0 + (phi1 * (phi1 * -0.5))))));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	tmp = 0
                            	if (phi1 <= -0.008) or not (phi1 <= 1.35e-132):
                            		tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	else:
                            		tmp = R * math.acos(((phi1 * phi2) + (math.cos((lambda1 - lambda2)) * (1.0 + (phi1 * (phi1 * -0.5))))))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0
                            	if ((phi1 <= -0.008) || !(phi1 <= 1.35e-132))
                            		tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))));
                            	else
                            		tmp = Float64(R * acos(Float64(Float64(phi1 * phi2) + Float64(cos(Float64(lambda1 - lambda2)) * Float64(1.0 + Float64(phi1 * Float64(phi1 * -0.5)))))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0;
                            	if ((phi1 <= -0.008) || ~((phi1 <= 1.35e-132)))
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	else
                            		tmp = R * acos(((phi1 * phi2) + (cos((lambda1 - lambda2)) * (1.0 + (phi1 * (phi1 * -0.5))))));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi1, -0.008], N[Not[LessEqual[phi1, 1.35e-132]], $MachinePrecision]], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[(phi1 * phi2), $MachinePrecision] + N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[(1.0 + N[(phi1 * N[(phi1 * -0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            \mathbf{if}\;\phi_1 \leq -0.008 \lor \neg \left(\phi_1 \leq 1.35 \cdot 10^{-132}\right):\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot \left(1 + \phi_1 \cdot \left(\phi_1 \cdot -0.5\right)\right)\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 2 regimes
                            2. if phi1 < -0.0080000000000000002 or 1.34999999999999995e-132 < phi1

                              1. Initial program 74.4%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Step-by-step derivation
                                1. *-commutative74.4%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative74.4%

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

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

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

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

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

                              if -0.0080000000000000002 < phi1 < 1.34999999999999995e-132

                              1. Initial program 68.4%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Taylor expanded in phi1 around 0 68.4%

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \color{blue}{\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\right) \cdot R \]
                              4. Step-by-step derivation
                                1. sub-neg41.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R \]
                                2. remove-double-neg41.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \left(\color{blue}{\left(-\left(-\lambda_1\right)\right)} + \left(-\lambda_2\right)\right)\right) \cdot R \]
                                3. mul-1-neg41.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right) \cdot R \]
                                4. distribute-neg-in41.0%

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

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

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

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

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

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

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) + -0.5 \cdot \left({\phi_1}^{2} \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)}\right) \cdot R \]
                              8. Step-by-step derivation
                                1. *-lft-identity38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \left(\color{blue}{1 \cdot \cos \left(\lambda_2 - \lambda_1\right)} + -0.5 \cdot \left({\phi_1}^{2} \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right) \cdot R \]
                                2. associate-*r*38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \left(1 \cdot \cos \left(\lambda_2 - \lambda_1\right) + \color{blue}{\left(-0.5 \cdot {\phi_1}^{2}\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)}\right)\right) \cdot R \]
                                3. distribute-rgt-out38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \color{blue}{\cos \left(\lambda_2 - \lambda_1\right) \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)}\right) \cdot R \]
                                4. cos-neg38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \color{blue}{\cos \left(-\left(\lambda_2 - \lambda_1\right)\right)} \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                5. sub-neg38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(-\color{blue}{\left(\lambda_2 + \left(-\lambda_1\right)\right)}\right) \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                6. +-commutative38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(-\color{blue}{\left(\left(-\lambda_1\right) + \lambda_2\right)}\right) \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                7. distribute-neg-in38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \color{blue}{\left(\left(-\left(-\lambda_1\right)\right) + \left(-\lambda_2\right)\right)} \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                8. remove-double-neg38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\color{blue}{\lambda_1} + \left(-\lambda_2\right)\right) \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                9. sub-neg38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \color{blue}{\left(\lambda_1 - \lambda_2\right)} \cdot \left(1 + -0.5 \cdot {\phi_1}^{2}\right)\right) \cdot R \]
                                10. unpow238.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot \left(1 + -0.5 \cdot \color{blue}{\left(\phi_1 \cdot \phi_1\right)}\right)\right) \cdot R \]
                                11. associate-*r*38.0%

                                  \[\leadsto \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot \left(1 + \color{blue}{\left(-0.5 \cdot \phi_1\right) \cdot \phi_1}\right)\right) \cdot R \]
                              9. Simplified38.0%

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.008 \lor \neg \left(\phi_1 \leq 1.35 \cdot 10^{-132}\right):\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\phi_1 \cdot \phi_2 + \cos \left(\lambda_1 - \lambda_2\right) \cdot \left(1 + \phi_1 \cdot \left(\phi_1 \cdot -0.5\right)\right)\right)\\ \end{array} \]

                            Alternative 21: 36.8% accurate, 2.0× speedup?

                            \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -4.2 \cdot 10^{-8}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\ \end{array} \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (if (<= phi1 -4.2e-8)
                               (* R (acos (* (cos phi1) (cos lambda1))))
                               (* R (acos (* (cos phi2) (cos lambda1))))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -4.2e-8) {
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	} else {
                            		tmp = R * acos((cos(phi2) * cos(lambda1)));
                            	}
                            	return tmp;
                            }
                            
                            real(8) function code(r, lambda1, lambda2, phi1, phi2)
                                real(8), intent (in) :: r
                                real(8), intent (in) :: lambda1
                                real(8), intent (in) :: lambda2
                                real(8), intent (in) :: phi1
                                real(8), intent (in) :: phi2
                                real(8) :: tmp
                                if (phi1 <= (-4.2d-8)) then
                                    tmp = r * acos((cos(phi1) * cos(lambda1)))
                                else
                                    tmp = r * acos((cos(phi2) * cos(lambda1)))
                                end if
                                code = tmp
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	double tmp;
                            	if (phi1 <= -4.2e-8) {
                            		tmp = R * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
                            	} else {
                            		tmp = R * Math.acos((Math.cos(phi2) * Math.cos(lambda1)));
                            	}
                            	return tmp;
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	tmp = 0
                            	if phi1 <= -4.2e-8:
                            		tmp = R * math.acos((math.cos(phi1) * math.cos(lambda1)))
                            	else:
                            		tmp = R * math.acos((math.cos(phi2) * math.cos(lambda1)))
                            	return tmp
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0
                            	if (phi1 <= -4.2e-8)
                            		tmp = Float64(R * acos(Float64(cos(phi1) * cos(lambda1))));
                            	else
                            		tmp = Float64(R * acos(Float64(cos(phi2) * cos(lambda1))));
                            	end
                            	return tmp
                            end
                            
                            function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = 0.0;
                            	if (phi1 <= -4.2e-8)
                            		tmp = R * acos((cos(phi1) * cos(lambda1)));
                            	else
                            		tmp = R * acos((cos(phi2) * cos(lambda1)));
                            	end
                            	tmp_2 = tmp;
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi1, -4.2e-8], N[(R * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
                            
                            \begin{array}{l}
                            
                            \\
                            \begin{array}{l}
                            \mathbf{if}\;\phi_1 \leq -4.2 \cdot 10^{-8}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
                            
                            \mathbf{else}:\\
                            \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
                            
                            
                            \end{array}
                            \end{array}
                            
                            Derivation
                            1. Split input into 2 regimes
                            2. if phi1 < -4.19999999999999989e-8

                              1. Initial program 77.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. Step-by-step derivation
                                1. *-commutative77.1%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative77.1%

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

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

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

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

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

                              if -4.19999999999999989e-8 < phi1

                              1. Initial program 70.4%

                                \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                              2. Step-by-step derivation
                                1. *-commutative70.4%

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

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

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

                                  \[\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_2 \cdot \sin \phi_1\right) \cdot R \]
                                5. *-commutative70.4%

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

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

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

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

                                \[\leadsto \cos^{-1} \color{blue}{\left(\cos \lambda_1 \cdot \cos \phi_2\right)} \cdot R \]
                              6. Step-by-step derivation
                                1. *-commutative36.1%

                                  \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_2 \cdot \cos \lambda_1\right)} \cdot R \]
                              7. Simplified36.1%

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

                              \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \leq -4.2 \cdot 10^{-8}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\ \end{array} \]

                            Alternative 22: 18.2% accurate, 2.9× speedup?

                            \[\begin{array}{l} \\ R \cdot \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) + \phi_1 \cdot \phi_2\right) \end{array} \]
                            (FPCore (R lambda1 lambda2 phi1 phi2)
                             :precision binary64
                             (* R (acos (+ (cos (- lambda2 lambda1)) (* phi1 phi2)))))
                            double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	return R * acos((cos((lambda2 - lambda1)) + (phi1 * phi2)));
                            }
                            
                            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 = r * acos((cos((lambda2 - lambda1)) + (phi1 * phi2)))
                            end function
                            
                            public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                            	return R * Math.acos((Math.cos((lambda2 - lambda1)) + (phi1 * phi2)));
                            }
                            
                            def code(R, lambda1, lambda2, phi1, phi2):
                            	return R * math.acos((math.cos((lambda2 - lambda1)) + (phi1 * phi2)))
                            
                            function code(R, lambda1, lambda2, phi1, phi2)
                            	return Float64(R * acos(Float64(cos(Float64(lambda2 - lambda1)) + Float64(phi1 * phi2))))
                            end
                            
                            function tmp = code(R, lambda1, lambda2, phi1, phi2)
                            	tmp = R * acos((cos((lambda2 - lambda1)) + (phi1 * phi2)));
                            end
                            
                            code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[ArcCos[N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] + N[(phi1 * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
                            
                            \begin{array}{l}
                            
                            \\
                            R \cdot \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) + \phi_1 \cdot \phi_2\right)
                            \end{array}
                            
                            Derivation
                            1. Initial program 72.3%

                              \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                            2. Taylor expanded in phi1 around 0 41.9%

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

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R \]
                              2. remove-double-neg28.1%

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

                                \[\leadsto \cos^{-1} \left(\phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \cos \left(\left(-\color{blue}{-1 \cdot \lambda_1}\right) + \left(-\lambda_2\right)\right)\right) \cdot R \]
                              4. distribute-neg-in28.1%

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

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

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

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

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

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

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

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

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

                            Reproduce

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