Spherical law of cosines

Percentage Accurate: 73.6% → 93.9%
Time: 18.5s
Alternatives: 21
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;
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(r, lambda1, lambda2, phi1, phi2)
use fmin_fmax_functions
    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 21 alternatives:

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

Initial Program: 73.6% 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;
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(r, lambda1, lambda2, phi1, phi2)
use fmin_fmax_functions
    real(8), intent (in) :: r
    real(8), intent (in) :: lambda1
    real(8), intent (in) :: lambda2
    real(8), intent (in) :: phi1
    real(8), intent (in) :: phi2
    code = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2):
	return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
function code(R, lambda1, lambda2, phi1, phi2)
	return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R)
end
function tmp = code(R, lambda1, lambda2, phi1, phi2)
	tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}

\\
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\end{array}

Alternative 1: 93.9% accurate, 0.5× speedup?

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

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

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 2: 93.9% accurate, 0.7× speedup?

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

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 3: 93.9% accurate, 0.7× speedup?

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

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

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 4: 83.3% accurate, 0.7× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.105 \lor \neg \left(\phi_2 \leq 120000000\right):\\ \;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\left(\mathsf{fma}\left(-0.16666666666666666 \cdot \phi_2, \phi_2, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\ \end{array} \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (if (or (<= phi2 -0.105) (not (<= phi2 120000000.0)))
   (*
    (acos
     (+
      (* (sin phi2) (sin phi1))
      (* (cos phi1) (* (cos (- lambda2 lambda1)) (cos phi2)))))
    R)
   (*
    (acos
     (+
      (* (* (fma (* -0.16666666666666666 phi2) phi2 1.0) (sin phi1)) phi2)
      (*
       (* (cos phi1) (cos phi2))
       (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))))))
    R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	double tmp;
	if ((phi2 <= -0.105) || !(phi2 <= 120000000.0)) {
		tmp = acos(((sin(phi2) * sin(phi1)) + (cos(phi1) * (cos((lambda2 - lambda1)) * cos(phi2))))) * R;
	} else {
		tmp = acos((((fma((-0.16666666666666666 * phi2), phi2, 1.0) * sin(phi1)) * phi2) + ((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda2) * sin(lambda1)))))) * R;
	}
	return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2)
	tmp = 0.0
	if ((phi2 <= -0.105) || !(phi2 <= 120000000.0))
		tmp = Float64(acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(cos(phi1) * Float64(cos(Float64(lambda2 - lambda1)) * cos(phi2))))) * R);
	else
		tmp = Float64(acos(Float64(Float64(Float64(fma(Float64(-0.16666666666666666 * phi2), phi2, 1.0) * sin(phi1)) * phi2) + Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda2) * sin(lambda1)))))) * R);
	end
	return tmp
end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi2, -0.105], N[Not[LessEqual[phi2, 120000000.0]], $MachinePrecision]], N[(N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[(N[(N[(-0.16666666666666666 * phi2), $MachinePrecision] * phi2 + 1.0), $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * phi2), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq -0.105 \lor \neg \left(\phi_2 \leq 120000000\right):\\
\;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\

\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\left(\mathsf{fma}\left(-0.16666666666666666 \cdot \phi_2, \phi_2, 1\right) \cdot \sin \phi_1\right) \cdot \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if phi2 < -0.104999999999999996 or 1.2e8 < phi2

    1. Initial program 79.4%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-+.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if -0.104999999999999996 < phi2 < 1.2e8

    1. Initial program 68.8%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 5: 83.2% accurate, 0.7× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq -0.098 \lor \neg \left(\phi_2 \leq 120000000\right):\\ \;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\sin \phi_1 \cdot \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\ \end{array} \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (if (or (<= phi2 -0.098) (not (<= phi2 120000000.0)))
   (*
    (acos
     (+
      (* (sin phi2) (sin phi1))
      (* (cos phi1) (* (cos (- lambda2 lambda1)) (cos phi2)))))
    R)
   (*
    (acos
     (+
      (* (sin phi1) phi2)
      (*
       (* (cos phi1) (cos phi2))
       (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))))))
    R)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	double tmp;
	if ((phi2 <= -0.098) || !(phi2 <= 120000000.0)) {
		tmp = acos(((sin(phi2) * sin(phi1)) + (cos(phi1) * (cos((lambda2 - lambda1)) * cos(phi2))))) * R;
	} else {
		tmp = acos(((sin(phi1) * phi2) + ((cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), (sin(lambda2) * sin(lambda1)))))) * R;
	}
	return tmp;
}
function code(R, lambda1, lambda2, phi1, phi2)
	tmp = 0.0
	if ((phi2 <= -0.098) || !(phi2 <= 120000000.0))
		tmp = Float64(acos(Float64(Float64(sin(phi2) * sin(phi1)) + Float64(cos(phi1) * Float64(cos(Float64(lambda2 - lambda1)) * cos(phi2))))) * R);
	else
		tmp = Float64(acos(Float64(Float64(sin(phi1) * phi2) + Float64(Float64(cos(phi1) * cos(phi2)) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda2) * sin(lambda1)))))) * R);
	end
	return tmp
end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi2, -0.098], N[Not[LessEqual[phi2, 120000000.0]], $MachinePrecision]], N[(N[ArcCos[N[(N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * phi2), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq -0.098 \lor \neg \left(\phi_2 \leq 120000000\right):\\
\;\;\;\;\cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\

\mathbf{else}:\\
\;\;\;\;\cos^{-1} \left(\sin \phi_1 \cdot \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot R\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if phi2 < -0.098000000000000004 or 1.2e8 < phi2

    1. Initial program 79.4%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-+.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if -0.098000000000000004 < phi2 < 1.2e8

    1. Initial program 68.8%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 6: 83.3% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ t_1 := \sin \phi_2 \cdot \sin \phi_1\\ \mathbf{if}\;\phi_1 \leq -60:\\ \;\;\;\;\cos^{-1} \left(t\_1 + \cos \phi_1 \cdot \left(t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 5.5 \cdot 10^{-10}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(t\_0 \cdot \cos \phi_1, \cos \phi_2, t\_1\right)\right)\right) \cdot R\\ \end{array} \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (let* ((t_0 (cos (- lambda2 lambda1))) (t_1 (* (sin phi2) (sin phi1))))
   (if (<= phi1 -60.0)
     (* (acos (+ t_1 (* (cos phi1) (* t_0 (cos phi2))))) R)
     (if (<= phi1 5.5e-10)
       (*
        (acos
         (*
          (fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2)))
          (cos phi2)))
        R)
       (*
        (- (/ (PI) 2.0) (asin (fma (* t_0 (cos phi1)) (cos phi2) t_1)))
        R)))))
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
t_1 := \sin \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\phi_1 \leq -60:\\
\;\;\;\;\cos^{-1} \left(t\_1 + \cos \phi_1 \cdot \left(t\_0 \cdot \cos \phi_2\right)\right) \cdot R\\

\mathbf{elif}\;\phi_1 \leq 5.5 \cdot 10^{-10}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\

\mathbf{else}:\\
\;\;\;\;\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(t\_0 \cdot \cos \phi_1, \cos \phi_2, t\_1\right)\right)\right) \cdot R\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if phi1 < -60

    1. Initial program 79.4%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-+.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if -60 < phi1 < 5.4999999999999996e-10

    1. Initial program 68.0%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if 5.4999999999999996e-10 < phi1

    1. Initial program 76.2%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-acos.f64N/A

        \[\leadsto \color{blue}{\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. acos-asinN/A

        \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-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)\right)} \cdot R \]
      3. lower--.f64N/A

        \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-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)\right)} \cdot R \]
      4. lower-/.f64N/A

        \[\leadsto \left(\color{blue}{\frac{\mathsf{PI}\left(\right)}{2}} - \sin^{-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)\right) \cdot R \]
      5. lower-PI.f64N/A

        \[\leadsto \left(\frac{\color{blue}{\mathsf{PI}\left(\right)}}{2} - \sin^{-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)\right) \cdot R \]
      6. lower-asin.f6476.2

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{2} - \color{blue}{\sin^{-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)}\right) \cdot R \]
      7. lift-+.f64N/A

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

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{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 \]
      9. lift-*.f64N/A

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

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{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 \]
      11. lift-*.f64N/A

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

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

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

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

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

Alternative 7: 83.3% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \sin \phi_2 \cdot \sin \phi_1\\ \mathbf{if}\;\phi_1 \leq -60:\\ \;\;\;\;\cos^{-1} \left(t\_0 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\ \mathbf{elif}\;\phi_1 \leq 5.5 \cdot 10^{-10}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{PI}\left(\right) \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right)\right) \cdot R\\ \end{array} \end{array} \]
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (let* ((t_0 (* (sin phi2) (sin phi1))))
   (if (<= phi1 -60.0)
     (*
      (acos (+ t_0 (* (cos phi1) (* (cos (- lambda2 lambda1)) (cos phi2)))))
      R)
     (if (<= phi1 5.5e-10)
       (*
        (acos
         (*
          (fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2)))
          (cos phi2)))
        R)
       (*
        (-
         (* (PI) 0.5)
         (asin (fma (* (cos (- lambda1 lambda2)) (cos phi2)) (cos phi1) t_0)))
        R)))))
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \sin \phi_2 \cdot \sin \phi_1\\
\mathbf{if}\;\phi_1 \leq -60:\\
\;\;\;\;\cos^{-1} \left(t\_0 + \cos \phi_1 \cdot \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R\\

\mathbf{elif}\;\phi_1 \leq 5.5 \cdot 10^{-10}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\

\mathbf{else}:\\
\;\;\;\;\left(\mathsf{PI}\left(\right) \cdot 0.5 - \sin^{-1} \left(\mathsf{fma}\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2, \cos \phi_1, t\_0\right)\right)\right) \cdot R\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if phi1 < -60

    1. Initial program 79.4%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-+.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if -60 < phi1 < 5.4999999999999996e-10

    1. Initial program 68.0%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if 5.4999999999999996e-10 < phi1

    1. Initial program 76.2%

      \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-acos.f64N/A

        \[\leadsto \color{blue}{\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. acos-asinN/A

        \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-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)\right)} \cdot R \]
      3. lower--.f64N/A

        \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-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)\right)} \cdot R \]
      4. lower-/.f64N/A

        \[\leadsto \left(\color{blue}{\frac{\mathsf{PI}\left(\right)}{2}} - \sin^{-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)\right) \cdot R \]
      5. lower-PI.f64N/A

        \[\leadsto \left(\frac{\color{blue}{\mathsf{PI}\left(\right)}}{2} - \sin^{-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)\right) \cdot R \]
      6. lower-asin.f6476.2

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{2} - \color{blue}{\sin^{-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)}\right) \cdot R \]
      7. lift-+.f64N/A

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

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{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 \]
      9. lift-*.f64N/A

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

        \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{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 \]
      11. lift-*.f64N/A

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

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

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

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

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

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

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

Alternative 8: 73.6% accurate, 1.0× speedup?

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

\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1, \sin \phi_2 \cdot \sin \phi_1\right)\right) \cdot R\\
\mathbf{if}\;\phi_2 \leq -3.2 \cdot 10^{-10}:\\
\;\;\;\;t\_0\\

\mathbf{elif}\;\phi_2 \leq 0.00039:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1\right) \cdot R\\

\mathbf{elif}\;\phi_2 \leq 1.3 \cdot 10^{+219}:\\
\;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2\right) \cdot R\\

\mathbf{else}:\\
\;\;\;\;t\_0\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if phi2 < -3.19999999999999981e-10 or 1.3e219 < phi2

    1. Initial program 78.0%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    if -3.19999999999999981e-10 < phi2 < 3.89999999999999993e-4

    1. Initial program 69.7%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      if 3.89999999999999993e-4 < phi2 < 1.3e219

      1. Initial program 78.4%

        \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Alternative 9: 73.6% accurate, 1.0× speedup?

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

      1. Initial program 78.0%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      if -3.19999999999999981e-10 < phi2 < 3.89999999999999993e-4

      1. Initial program 69.7%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        if 3.89999999999999993e-4 < phi2 < 1.3e219

        1. Initial program 78.4%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Alternative 10: 83.3% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -60 \lor \neg \left(\phi_1 \leq 5.5 \cdot 10^{-10}\right):\\ \;\;\;\;\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\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\ \end{array} \end{array} \]
      (FPCore (R lambda1 lambda2 phi1 phi2)
       :precision binary64
       (if (or (<= phi1 -60.0) (not (<= phi1 5.5e-10)))
         (*
          (acos
           (+
            (* (sin phi1) (sin phi2))
            (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
          R)
         (*
          (acos
           (*
            (fma (cos lambda1) (cos lambda2) (* (sin lambda1) (sin lambda2)))
            (cos phi2)))
          R)))
      double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
      	double tmp;
      	if ((phi1 <= -60.0) || !(phi1 <= 5.5e-10)) {
      		tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
      	} else {
      		tmp = acos((fma(cos(lambda1), cos(lambda2), (sin(lambda1) * sin(lambda2))) * cos(phi2))) * R;
      	}
      	return tmp;
      }
      
      function code(R, lambda1, lambda2, phi1, phi2)
      	tmp = 0.0
      	if ((phi1 <= -60.0) || !(phi1 <= 5.5e-10))
      		tmp = Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R);
      	else
      		tmp = Float64(acos(Float64(fma(cos(lambda1), cos(lambda2), Float64(sin(lambda1) * sin(lambda2))) * cos(phi2))) * R);
      	end
      	return tmp
      end
      
      code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[phi1, -60.0], N[Not[LessEqual[phi1, 5.5e-10]], $MachinePrecision]], 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], N[(N[ArcCos[N[(N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision] + N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;\phi_1 \leq -60 \lor \neg \left(\phi_1 \leq 5.5 \cdot 10^{-10}\right):\\
      \;\;\;\;\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\\
      
      \mathbf{else}:\\
      \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot R\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if phi1 < -60 or 5.4999999999999996e-10 < phi1

        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. Add Preprocessing

        if -60 < phi1 < 5.4999999999999996e-10

        1. Initial program 68.0%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Alternative 11: 83.3% accurate, 1.0× speedup?

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

        1. Initial program 79.4%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-+.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        if -60 < phi1 < 5.4999999999999996e-10

        1. Initial program 68.0%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        if 5.4999999999999996e-10 < phi1

        1. Initial program 76.2%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
      3. Recombined 3 regimes into one program.
      4. Final simplification82.6%

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

      Alternative 12: 83.3% accurate, 1.0× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        if -60 < phi1 < 5.4999999999999996e-10

        1. Initial program 68.0%

          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-cos.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Alternative 13: 73.1% accurate, 1.0× speedup?

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

        1. Initial program 78.3%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        if -3.19999999999999981e-10 < phi2 < 1.7e-5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        Alternative 14: 60.1% accurate, 1.0× speedup?

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

          1. Initial program 71.3%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            if 2.2999999999999998e-22 < phi2

            1. Initial program 81.0%

              \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            2. Add Preprocessing
            3. Step-by-step derivation
              1. lift-*.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \color{blue}{\left(\phi_2 + \phi_1\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
              23. lower-+.f6444.8

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

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

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

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

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

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

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

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

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

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

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

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

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

                \[\leadsto \cos^{-1} \left(\frac{-1}{4} \cdot \color{blue}{0} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
              12. metadata-eval44.6

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

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

          Alternative 15: 58.6% accurate, 1.5× speedup?

          \[\begin{array}{l} \\ \cos^{-1} \left(0 + \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 (+ 0.0 (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))
          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
          	return acos((0.0 + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
          }
          
          module fmin_fmax_functions
              implicit none
              private
              public fmax
              public fmin
          
              interface fmax
                  module procedure fmax88
                  module procedure fmax44
                  module procedure fmax84
                  module procedure fmax48
              end interface
              interface fmin
                  module procedure fmin88
                  module procedure fmin44
                  module procedure fmin84
                  module procedure fmin48
              end interface
          contains
              real(8) function fmax88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(4) function fmax44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(8) function fmax84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmax48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
              end function
              real(8) function fmin88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(4) function fmin44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(8) function fmin84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmin48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
              end function
          end module
          
          real(8) function code(r, lambda1, lambda2, phi1, phi2)
          use fmin_fmax_functions
              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((0.0d0 + ((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((0.0 + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
          }
          
          def code(R, lambda1, lambda2, phi1, phi2):
          	return math.acos((0.0 + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
          
          function code(R, lambda1, lambda2, phi1, phi2)
          	return Float64(acos(Float64(0.0 + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R)
          end
          
          function tmp = code(R, lambda1, lambda2, phi1, phi2)
          	tmp = acos((0.0 + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
          end
          
          code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(0.0 + 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(0 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
          \end{array}
          
          Derivation
          1. Initial program 73.7%

            \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-*.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \color{blue}{\left(\phi_2 + \phi_1\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            23. lower-+.f6457.4

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

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

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

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

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

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

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

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

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

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

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

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

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

              \[\leadsto \cos^{-1} \left(\frac{-1}{4} \cdot \color{blue}{0} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
            12. metadata-eval57.6

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

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

          Alternative 16: 37.4% accurate, 1.9× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              if -7.7999999999999998e-302 < phi2 < 3.89999999999999993e-4

              1. Initial program 65.7%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                if 3.89999999999999993e-4 < phi2

                1. Initial program 80.4%

                  \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                2. Add Preprocessing
                3. Step-by-step derivation
                  1. lift-*.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \color{blue}{\left(\phi_2 + \phi_1\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                  23. lower-+.f6444.1

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

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

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

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

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

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

                  \[\leadsto \cos^{-1} \left(\frac{1}{2} \cdot \left(\cos \left(\mathsf{neg}\left(\phi_2\right)\right) - \cos \phi_2\right) + \color{blue}{\cos \lambda_1 \cdot \cos \phi_2}\right) \cdot R \]
                9. Step-by-step derivation
                  1. Applied rewrites36.0%

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

                Alternative 17: 42.5% accurate, 1.9× speedup?

                \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\lambda_1 \leq -8.5 \cdot 10^{-5} \lor \neg \left(\lambda_1 \leq 7000000\right):\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\ \end{array} \end{array} \]
                (FPCore (R lambda1 lambda2 phi1 phi2)
                 :precision binary64
                 (if (or (<= lambda1 -8.5e-5) (not (<= lambda1 7000000.0)))
                   (* (acos (* (cos lambda1) (cos phi1))) R)
                   (* (acos (* (cos lambda2) (cos phi1))) R)))
                double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                	double tmp;
                	if ((lambda1 <= -8.5e-5) || !(lambda1 <= 7000000.0)) {
                		tmp = acos((cos(lambda1) * cos(phi1))) * R;
                	} else {
                		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                	}
                	return tmp;
                }
                
                module fmin_fmax_functions
                    implicit none
                    private
                    public fmax
                    public fmin
                
                    interface fmax
                        module procedure fmax88
                        module procedure fmax44
                        module procedure fmax84
                        module procedure fmax48
                    end interface
                    interface fmin
                        module procedure fmin88
                        module procedure fmin44
                        module procedure fmin84
                        module procedure fmin48
                    end interface
                contains
                    real(8) function fmax88(x, y) result (res)
                        real(8), intent (in) :: x
                        real(8), intent (in) :: y
                        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                    end function
                    real(4) function fmax44(x, y) result (res)
                        real(4), intent (in) :: x
                        real(4), intent (in) :: y
                        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                    end function
                    real(8) function fmax84(x, y) result(res)
                        real(8), intent (in) :: x
                        real(4), intent (in) :: y
                        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
                    end function
                    real(8) function fmax48(x, y) result(res)
                        real(4), intent (in) :: x
                        real(8), intent (in) :: y
                        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
                    end function
                    real(8) function fmin88(x, y) result (res)
                        real(8), intent (in) :: x
                        real(8), intent (in) :: y
                        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                    end function
                    real(4) function fmin44(x, y) result (res)
                        real(4), intent (in) :: x
                        real(4), intent (in) :: y
                        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                    end function
                    real(8) function fmin84(x, y) result(res)
                        real(8), intent (in) :: x
                        real(4), intent (in) :: y
                        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
                    end function
                    real(8) function fmin48(x, y) result(res)
                        real(4), intent (in) :: x
                        real(8), intent (in) :: y
                        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
                    end function
                end module
                
                real(8) function code(r, lambda1, lambda2, phi1, phi2)
                use fmin_fmax_functions
                    real(8), intent (in) :: r
                    real(8), intent (in) :: lambda1
                    real(8), intent (in) :: lambda2
                    real(8), intent (in) :: phi1
                    real(8), intent (in) :: phi2
                    real(8) :: tmp
                    if ((lambda1 <= (-8.5d-5)) .or. (.not. (lambda1 <= 7000000.0d0))) then
                        tmp = acos((cos(lambda1) * cos(phi1))) * r
                    else
                        tmp = acos((cos(lambda2) * cos(phi1))) * r
                    end if
                    code = tmp
                end function
                
                public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                	double tmp;
                	if ((lambda1 <= -8.5e-5) || !(lambda1 <= 7000000.0)) {
                		tmp = Math.acos((Math.cos(lambda1) * Math.cos(phi1))) * R;
                	} else {
                		tmp = Math.acos((Math.cos(lambda2) * Math.cos(phi1))) * R;
                	}
                	return tmp;
                }
                
                def code(R, lambda1, lambda2, phi1, phi2):
                	tmp = 0
                	if (lambda1 <= -8.5e-5) or not (lambda1 <= 7000000.0):
                		tmp = math.acos((math.cos(lambda1) * math.cos(phi1))) * R
                	else:
                		tmp = math.acos((math.cos(lambda2) * math.cos(phi1))) * R
                	return tmp
                
                function code(R, lambda1, lambda2, phi1, phi2)
                	tmp = 0.0
                	if ((lambda1 <= -8.5e-5) || !(lambda1 <= 7000000.0))
                		tmp = Float64(acos(Float64(cos(lambda1) * cos(phi1))) * R);
                	else
                		tmp = Float64(acos(Float64(cos(lambda2) * cos(phi1))) * R);
                	end
                	return tmp
                end
                
                function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                	tmp = 0.0;
                	if ((lambda1 <= -8.5e-5) || ~((lambda1 <= 7000000.0)))
                		tmp = acos((cos(lambda1) * cos(phi1))) * R;
                	else
                		tmp = acos((cos(lambda2) * cos(phi1))) * R;
                	end
                	tmp_2 = tmp;
                end
                
                code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[Or[LessEqual[lambda1, -8.5e-5], N[Not[LessEqual[lambda1, 7000000.0]], $MachinePrecision]], N[(N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
                
                \begin{array}{l}
                
                \\
                \begin{array}{l}
                \mathbf{if}\;\lambda_1 \leq -8.5 \cdot 10^{-5} \lor \neg \left(\lambda_1 \leq 7000000\right):\\
                \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\
                
                \mathbf{else}:\\
                \;\;\;\;\cos^{-1} \left(\cos \lambda_2 \cdot \cos \phi_1\right) \cdot R\\
                
                
                \end{array}
                \end{array}
                
                Derivation
                1. Split input into 2 regimes
                2. if lambda1 < -8.500000000000001e-5 or 7e6 < lambda1

                  1. Initial program 55.1%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    if -8.500000000000001e-5 < lambda1 < 7e6

                    1. Initial program 91.8%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    Alternative 18: 50.2% accurate, 2.0× speedup?

                    \[\begin{array}{l} \\ \begin{array}{l} t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\ \mathbf{if}\;\phi_1 \leq -60:\\ \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\ \end{array} \end{array} \]
                    (FPCore (R lambda1 lambda2 phi1 phi2)
                     :precision binary64
                     (let* ((t_0 (cos (- lambda2 lambda1))))
                       (if (<= phi1 -60.0)
                         (* (acos (* t_0 (cos phi1))) R)
                         (* (acos (* t_0 (cos phi2))) R))))
                    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                    	double t_0 = cos((lambda2 - lambda1));
                    	double tmp;
                    	if (phi1 <= -60.0) {
                    		tmp = acos((t_0 * cos(phi1))) * R;
                    	} else {
                    		tmp = acos((t_0 * cos(phi2))) * R;
                    	}
                    	return tmp;
                    }
                    
                    module fmin_fmax_functions
                        implicit none
                        private
                        public fmax
                        public fmin
                    
                        interface fmax
                            module procedure fmax88
                            module procedure fmax44
                            module procedure fmax84
                            module procedure fmax48
                        end interface
                        interface fmin
                            module procedure fmin88
                            module procedure fmin44
                            module procedure fmin84
                            module procedure fmin48
                        end interface
                    contains
                        real(8) function fmax88(x, y) result (res)
                            real(8), intent (in) :: x
                            real(8), intent (in) :: y
                            res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                        end function
                        real(4) function fmax44(x, y) result (res)
                            real(4), intent (in) :: x
                            real(4), intent (in) :: y
                            res = merge(y, merge(x, max(x, y), y /= y), x /= x)
                        end function
                        real(8) function fmax84(x, y) result(res)
                            real(8), intent (in) :: x
                            real(4), intent (in) :: y
                            res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
                        end function
                        real(8) function fmax48(x, y) result(res)
                            real(4), intent (in) :: x
                            real(8), intent (in) :: y
                            res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
                        end function
                        real(8) function fmin88(x, y) result (res)
                            real(8), intent (in) :: x
                            real(8), intent (in) :: y
                            res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                        end function
                        real(4) function fmin44(x, y) result (res)
                            real(4), intent (in) :: x
                            real(4), intent (in) :: y
                            res = merge(y, merge(x, min(x, y), y /= y), x /= x)
                        end function
                        real(8) function fmin84(x, y) result(res)
                            real(8), intent (in) :: x
                            real(4), intent (in) :: y
                            res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
                        end function
                        real(8) function fmin48(x, y) result(res)
                            real(4), intent (in) :: x
                            real(8), intent (in) :: y
                            res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
                        end function
                    end module
                    
                    real(8) function code(r, lambda1, lambda2, phi1, phi2)
                    use fmin_fmax_functions
                        real(8), intent (in) :: r
                        real(8), intent (in) :: lambda1
                        real(8), intent (in) :: lambda2
                        real(8), intent (in) :: phi1
                        real(8), intent (in) :: phi2
                        real(8) :: t_0
                        real(8) :: tmp
                        t_0 = cos((lambda2 - lambda1))
                        if (phi1 <= (-60.0d0)) then
                            tmp = acos((t_0 * cos(phi1))) * r
                        else
                            tmp = acos((t_0 * cos(phi2))) * r
                        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((lambda2 - lambda1));
                    	double tmp;
                    	if (phi1 <= -60.0) {
                    		tmp = Math.acos((t_0 * Math.cos(phi1))) * R;
                    	} else {
                    		tmp = Math.acos((t_0 * Math.cos(phi2))) * R;
                    	}
                    	return tmp;
                    }
                    
                    def code(R, lambda1, lambda2, phi1, phi2):
                    	t_0 = math.cos((lambda2 - lambda1))
                    	tmp = 0
                    	if phi1 <= -60.0:
                    		tmp = math.acos((t_0 * math.cos(phi1))) * R
                    	else:
                    		tmp = math.acos((t_0 * math.cos(phi2))) * R
                    	return tmp
                    
                    function code(R, lambda1, lambda2, phi1, phi2)
                    	t_0 = cos(Float64(lambda2 - lambda1))
                    	tmp = 0.0
                    	if (phi1 <= -60.0)
                    		tmp = Float64(acos(Float64(t_0 * cos(phi1))) * R);
                    	else
                    		tmp = Float64(acos(Float64(t_0 * cos(phi2))) * R);
                    	end
                    	return tmp
                    end
                    
                    function tmp_2 = code(R, lambda1, lambda2, phi1, phi2)
                    	t_0 = cos((lambda2 - lambda1));
                    	tmp = 0.0;
                    	if (phi1 <= -60.0)
                    		tmp = acos((t_0 * cos(phi1))) * R;
                    	else
                    		tmp = acos((t_0 * cos(phi2))) * R;
                    	end
                    	tmp_2 = tmp;
                    end
                    
                    code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[phi1, -60.0], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(t$95$0 * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]]
                    
                    \begin{array}{l}
                    
                    \\
                    \begin{array}{l}
                    t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
                    \mathbf{if}\;\phi_1 \leq -60:\\
                    \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_1\right) \cdot R\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;\cos^{-1} \left(t\_0 \cdot \cos \phi_2\right) \cdot R\\
                    
                    
                    \end{array}
                    \end{array}
                    
                    Derivation
                    1. Split input into 2 regimes
                    2. if phi1 < -60

                      1. Initial program 79.4%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                      if -60 < phi1

                      1. Initial program 71.5%

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

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

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

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

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right) \cdot R \]
                        4. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_2\right) \cdot R \]
                        5. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_2\right) \cdot R \]
                        6. cos-neg-revN/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                        7. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                        8. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                        9. distribute-neg-inN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                        10. +-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                        11. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_2\right) \cdot R \]
                        12. lower-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_2\right) \cdot R \]
                        13. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                        14. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                        15. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_2\right) \cdot R \]
                        16. *-lft-identityN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_2\right) \cdot R \]
                        17. lower--.f64N/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_2\right) \cdot R \]
                        18. lower-cos.f6447.3

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right) \cdot R \]
                      5. Applied rewrites47.3%

                        \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)} \cdot R \]
                    3. Recombined 2 regimes into one program.
                    4. Add Preprocessing

                    Alternative 19: 48.1% accurate, 2.0× speedup?

                    \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_2 \leq 2.5:\\ \;\;\;\;\cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2, 0\right)\right) \cdot R\\ \end{array} \end{array} \]
                    (FPCore (R lambda1 lambda2 phi1 phi2)
                     :precision binary64
                     (if (<= phi2 2.5)
                       (* (acos (* (cos (- lambda2 lambda1)) (cos phi1))) R)
                       (* (acos (fma (cos lambda1) (cos phi2) 0.0)) R)))
                    double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                    	double tmp;
                    	if (phi2 <= 2.5) {
                    		tmp = acos((cos((lambda2 - lambda1)) * cos(phi1))) * R;
                    	} else {
                    		tmp = acos(fma(cos(lambda1), cos(phi2), 0.0)) * R;
                    	}
                    	return tmp;
                    }
                    
                    function code(R, lambda1, lambda2, phi1, phi2)
                    	tmp = 0.0
                    	if (phi2 <= 2.5)
                    		tmp = Float64(acos(Float64(cos(Float64(lambda2 - lambda1)) * cos(phi1))) * R);
                    	else
                    		tmp = Float64(acos(fma(cos(lambda1), cos(phi2), 0.0)) * R);
                    	end
                    	return tmp
                    end
                    
                    code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[phi2, 2.5], N[(N[ArcCos[N[(N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision] * N[Cos[phi1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision], N[(N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + 0.0), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]]
                    
                    \begin{array}{l}
                    
                    \\
                    \begin{array}{l}
                    \mathbf{if}\;\phi_2 \leq 2.5:\\
                    \;\;\;\;\cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right) \cdot R\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;\cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2, 0\right)\right) \cdot R\\
                    
                    
                    \end{array}
                    \end{array}
                    
                    Derivation
                    1. Split input into 2 regimes
                    2. if phi2 < 2.5

                      1. Initial program 71.3%

                        \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                      2. Add Preprocessing
                      3. Taylor expanded in phi2 around 0

                        \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                      4. Step-by-step derivation
                        1. *-commutativeN/A

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                        2. lower-*.f64N/A

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                        3. *-lft-identityN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                        4. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                        5. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                        6. cos-neg-revN/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                        7. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        8. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        9. distribute-neg-inN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        10. +-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        11. mul-1-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                        12. lower-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                        13. remove-double-negN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        14. fp-cancel-sign-sub-invN/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        15. metadata-evalN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                        16. *-lft-identityN/A

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                        17. lower--.f64N/A

                          \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                        18. lower-cos.f6453.0

                          \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                      5. Applied rewrites53.0%

                        \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]

                      if 2.5 < phi2

                      1. Initial program 81.5%

                        \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                      2. Add Preprocessing
                      3. Step-by-step derivation
                        1. lift-*.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_1 \cdot \sin \phi_2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        2. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_1} \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        3. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \color{blue}{\sin \phi_2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        4. sin-multN/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\frac{\cos \left(\phi_1 - \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        5. lower-/.f64N/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\frac{\cos \left(\phi_1 - \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        6. lower--.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\color{blue}{\cos \left(\phi_1 - \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        7. cos-diffN/A

                          \[\leadsto \cos^{-1} \left(\frac{\color{blue}{\left(\cos \phi_1 \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right)} - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        8. lift-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\color{blue}{\cos \phi_1} \cdot \cos \phi_2 + \sin \phi_1 \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        9. lift-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_1 \cdot \color{blue}{\cos \phi_2} + \sin \phi_1 \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        10. *-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\color{blue}{\cos \phi_2 \cdot \cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        11. lift-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\color{blue}{\cos \phi_2} \cdot \cos \phi_1 + \sin \phi_1 \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        12. lift-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \color{blue}{\cos \phi_1} + \sin \phi_1 \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        13. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \cos \phi_1 + \color{blue}{\sin \phi_1} \cdot \sin \phi_2\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        14. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \cos \phi_1 + \sin \phi_1 \cdot \color{blue}{\sin \phi_2}\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        15. *-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \cos \phi_1 + \color{blue}{\sin \phi_2 \cdot \sin \phi_1}\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        16. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \cos \phi_1 + \color{blue}{\sin \phi_2} \cdot \sin \phi_1\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        17. lift-sin.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\left(\cos \phi_2 \cdot \cos \phi_1 + \sin \phi_2 \cdot \color{blue}{\sin \phi_1}\right) - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        18. cos-diff-revN/A

                          \[\leadsto \cos^{-1} \left(\frac{\color{blue}{\cos \left(\phi_2 - \phi_1\right)} - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        19. lower-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\color{blue}{\cos \left(\phi_2 - \phi_1\right)} - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        20. lower--.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\cos \color{blue}{\left(\phi_2 - \phi_1\right)} - \cos \left(\phi_1 + \phi_2\right)}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        21. lower-cos.f64N/A

                          \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \color{blue}{\cos \left(\phi_1 + \phi_2\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        22. +-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \color{blue}{\left(\phi_2 + \phi_1\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        23. lower-+.f6444.5

                          \[\leadsto \cos^{-1} \left(\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \color{blue}{\left(\phi_2 + \phi_1\right)}}{2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                      4. Applied rewrites44.5%

                        \[\leadsto \cos^{-1} \left(\color{blue}{\frac{\cos \left(\phi_2 - \phi_1\right) - \cos \left(\phi_2 + \phi_1\right)}{2}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                      5. Taylor expanded in lambda2 around 0

                        \[\leadsto \cos^{-1} \color{blue}{\left(\frac{1}{2} \cdot \left(\cos \left(\phi_2 - \phi_1\right) - \cos \left(\phi_1 + \phi_2\right)\right) + \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)} \cdot R \]
                      6. Step-by-step derivation
                        1. *-commutativeN/A

                          \[\leadsto \cos^{-1} \left(\color{blue}{\left(\cos \left(\phi_2 - \phi_1\right) - \cos \left(\phi_1 + \phi_2\right)\right) \cdot \frac{1}{2}} + \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) \cdot R \]
                        2. lower-fma.f64N/A

                          \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\phi_2 - \phi_1\right) - \cos \left(\phi_1 + \phi_2\right), \frac{1}{2}, \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right)} \cdot R \]
                      7. Applied rewrites37.8%

                        \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\cos \left(\phi_1 - \phi_2\right) - \cos \left(\phi_2 + \phi_1\right), 0.5, \cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)\right)\right)} \cdot R \]
                      8. Taylor expanded in phi1 around 0

                        \[\leadsto \cos^{-1} \left(\frac{1}{2} \cdot \left(\cos \left(\mathsf{neg}\left(\phi_2\right)\right) - \cos \phi_2\right) + \color{blue}{\cos \lambda_1 \cdot \cos \phi_2}\right) \cdot R \]
                      9. Step-by-step derivation
                        1. Applied rewrites36.4%

                          \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \color{blue}{\cos \phi_2}, 0\right)\right) \cdot R \]
                      10. Recombined 2 regimes into one program.
                      11. Add Preprocessing

                      Alternative 20: 28.3% accurate, 2.0× speedup?

                      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\phi_1 \leq -0.00155:\\ \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(-0.5 \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R\\ \end{array} \end{array} \]
                      (FPCore (R lambda1 lambda2 phi1 phi2)
                       :precision binary64
                       (if (<= phi1 -0.00155)
                         (* (acos (* (cos lambda1) (cos phi1))) R)
                         (*
                          (-
                           (/ (PI) 2.0)
                           (asin (* (fma (* -0.5 phi1) phi1 1.0) (cos (- lambda2 lambda1)))))
                          R)))
                      \begin{array}{l}
                      
                      \\
                      \begin{array}{l}
                      \mathbf{if}\;\phi_1 \leq -0.00155:\\
                      \;\;\;\;\cos^{-1} \left(\cos \lambda_1 \cdot \cos \phi_1\right) \cdot R\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(-0.5 \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R\\
                      
                      
                      \end{array}
                      \end{array}
                      
                      Derivation
                      1. Split input into 2 regimes
                      2. if phi1 < -0.00154999999999999995

                        1. Initial program 79.4%

                          \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                        2. Add Preprocessing
                        3. Taylor expanded in phi2 around 0

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                        4. Step-by-step derivation
                          1. *-commutativeN/A

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                          2. lower-*.f64N/A

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                          3. *-lft-identityN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                          4. metadata-evalN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                          5. fp-cancel-sign-sub-invN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                          6. cos-neg-revN/A

                            \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                          7. remove-double-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          8. mul-1-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          9. distribute-neg-inN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          10. +-commutativeN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          11. mul-1-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                          12. lower-cos.f64N/A

                            \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                          13. remove-double-negN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          14. fp-cancel-sign-sub-invN/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          15. metadata-evalN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                          16. *-lft-identityN/A

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                          17. lower--.f64N/A

                            \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                          18. lower-cos.f6447.5

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                        5. Applied rewrites47.5%

                          \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                        6. Taylor expanded in lambda2 around 0

                          \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\lambda_1\right)\right) \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]
                        7. Step-by-step derivation
                          1. Applied rewrites36.4%

                            \[\leadsto \cos^{-1} \left(\cos \lambda_1 \cdot \cos \color{blue}{\phi_1}\right) \cdot R \]

                          if -0.00154999999999999995 < phi1

                          1. Initial program 71.5%

                            \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                          2. Add Preprocessing
                          3. Taylor expanded in phi2 around 0

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \phi_1 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                          4. Step-by-step derivation
                            1. *-commutativeN/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            2. lower-*.f64N/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_1\right)} \cdot R \]
                            3. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_1\right) \cdot R \]
                            4. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_1\right) \cdot R \]
                            5. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_1\right) \cdot R \]
                            6. cos-neg-revN/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            7. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            8. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            9. distribute-neg-inN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            10. +-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            11. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_1\right) \cdot R \]
                            12. lower-cos.f64N/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_1\right) \cdot R \]
                            13. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            14. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            15. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_1\right) \cdot R \]
                            16. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_1\right) \cdot R \]
                            17. lower--.f64N/A

                              \[\leadsto \cos^{-1} \left(\cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_1\right) \cdot R \]
                            18. lower-cos.f6444.0

                              \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_1}\right) \cdot R \]
                          5. Applied rewrites44.0%

                            \[\leadsto \cos^{-1} \color{blue}{\left(\cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_1\right)} \cdot R \]
                          6. Taylor expanded in phi1 around 0

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) + \color{blue}{\frac{-1}{2} \cdot \left({\phi_1}^{2} \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)}\right) \cdot R \]
                          7. Step-by-step derivation
                            1. Applied rewrites23.1%

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(-0.5 \cdot \phi_1, \phi_1, 1\right) \cdot \color{blue}{\cos \left(\lambda_2 - \lambda_1\right)}\right) \cdot R \]
                            2. Step-by-step derivation
                              1. lift-acos.f64N/A

                                \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\frac{-1}{2} \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)} \cdot R \]
                              2. acos-asinN/A

                                \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(\frac{-1}{2} \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)} \cdot R \]
                              3. lift-PI.f64N/A

                                \[\leadsto \left(\frac{\color{blue}{\mathsf{PI}\left(\right)}}{2} - \sin^{-1} \left(\mathsf{fma}\left(\frac{-1}{2} \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                              4. lift-/.f64N/A

                                \[\leadsto \left(\color{blue}{\frac{\mathsf{PI}\left(\right)}{2}} - \sin^{-1} \left(\mathsf{fma}\left(\frac{-1}{2} \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                              5. lower--.f64N/A

                                \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(\frac{-1}{2} \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)} \cdot R \]
                              6. lower-asin.f6423.2

                                \[\leadsto \left(\frac{\mathsf{PI}\left(\right)}{2} - \color{blue}{\sin^{-1} \left(\mathsf{fma}\left(-0.5 \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)}\right) \cdot R \]
                            3. Applied rewrites23.2%

                              \[\leadsto \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} - \sin^{-1} \left(\mathsf{fma}\left(-0.5 \cdot \phi_1, \phi_1, 1\right) \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)} \cdot R \]
                          8. Recombined 2 regimes into one program.
                          9. Add Preprocessing

                          Alternative 21: 18.4% accurate, 2.9× speedup?

                          \[\begin{array}{l} \\ \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \phi_1, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \end{array} \]
                          (FPCore (R lambda1 lambda2 phi1 phi2)
                           :precision binary64
                           (* (acos (fma phi2 phi1 (cos (- lambda2 lambda1)))) R))
                          double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
                          	return acos(fma(phi2, phi1, cos((lambda2 - lambda1)))) * R;
                          }
                          
                          function code(R, lambda1, lambda2, phi1, phi2)
                          	return Float64(acos(fma(phi2, phi1, cos(Float64(lambda2 - lambda1)))) * R)
                          end
                          
                          code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(phi2 * phi1 + N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
                          
                          \begin{array}{l}
                          
                          \\
                          \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \phi_1, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R
                          \end{array}
                          
                          Derivation
                          1. Initial program 73.7%

                            \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                          2. Add Preprocessing
                          3. Taylor expanded in phi1 around 0

                            \[\leadsto \cos^{-1} \color{blue}{\left(\phi_1 \cdot \sin \phi_2 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)} \cdot R \]
                          4. Step-by-step derivation
                            1. *-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\color{blue}{\sin \phi_2 \cdot \phi_1} + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R \]
                            2. lower-fma.f64N/A

                              \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)} \cdot R \]
                            3. lower-sin.f64N/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\color{blue}{\sin \phi_2}, \phi_1, \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R \]
                            4. *-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
                            5. lower-*.f64N/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \color{blue}{\cos \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}\right)\right) \cdot R \]
                            6. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_1 - \color{blue}{1 \cdot \lambda_2}\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            7. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_1 - \color{blue}{\left(\mathsf{neg}\left(-1\right)\right)} \cdot \lambda_2\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            8. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \color{blue}{\left(\lambda_1 + -1 \cdot \lambda_2\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            9. cos-neg-revN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \color{blue}{\cos \left(\mathsf{neg}\left(\left(\lambda_1 + -1 \cdot \lambda_2\right)\right)\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            10. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\mathsf{neg}\left(\left(\color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right)} + -1 \cdot \lambda_2\right)\right)\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            11. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\lambda_1\right)\right)\right)\right) + \color{blue}{\left(\mathsf{neg}\left(\lambda_2\right)\right)}\right)\right)\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            12. distribute-neg-inN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\left(\left(\mathsf{neg}\left(\lambda_1\right)\right) + \lambda_2\right)\right)\right)}\right)\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            13. +-commutativeN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\color{blue}{\left(\lambda_2 + \left(\mathsf{neg}\left(\lambda_1\right)\right)\right)}\right)\right)\right)\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            14. mul-1-negN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + \color{blue}{-1 \cdot \lambda_1}\right)\right)\right)\right)\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            15. lower-cos.f64N/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \color{blue}{\cos \left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(\lambda_2 + -1 \cdot \lambda_1\right)\right)\right)\right)\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            16. remove-double-negN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \color{blue}{\left(\lambda_2 + -1 \cdot \lambda_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            17. fp-cancel-sign-sub-invN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \color{blue}{\left(\lambda_2 - \left(\mathsf{neg}\left(-1\right)\right) \cdot \lambda_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            18. metadata-evalN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_2 - \color{blue}{1} \cdot \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            19. *-lft-identityN/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_2 - \color{blue}{\lambda_1}\right) \cdot \cos \phi_2\right)\right) \cdot R \]
                            20. lower--.f64N/A

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \color{blue}{\left(\lambda_2 - \lambda_1\right)} \cdot \cos \phi_2\right)\right) \cdot R \]
                            21. lower-cos.f6432.0

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_2 - \lambda_1\right) \cdot \color{blue}{\cos \phi_2}\right)\right) \cdot R \]
                          5. Applied rewrites32.0%

                            \[\leadsto \cos^{-1} \color{blue}{\left(\mathsf{fma}\left(\sin \phi_2, \phi_1, \cos \left(\lambda_2 - \lambda_1\right) \cdot \cos \phi_2\right)\right)} \cdot R \]
                          6. Taylor expanded in phi2 around 0

                            \[\leadsto \cos^{-1} \left(\cos \left(\lambda_2 - \lambda_1\right) + \color{blue}{\phi_1 \cdot \phi_2}\right) \cdot R \]
                          7. Step-by-step derivation
                            1. Applied rewrites18.2%

                              \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\phi_2, \color{blue}{\phi_1}, \cos \left(\lambda_2 - \lambda_1\right)\right)\right) \cdot R \]
                            2. Add Preprocessing

                            Reproduce

                            ?
                            herbie shell --seed 2024347 
                            (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))