Average Error: 16.7 → 3.6
Time: 60.0s
Precision: 64
\[\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\]
\[\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \log \left(e^{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right) \cdot R\]
\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
\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \log \left(e^{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1589794 = phi1;
        double r1589795 = sin(r1589794);
        double r1589796 = phi2;
        double r1589797 = sin(r1589796);
        double r1589798 = r1589795 * r1589797;
        double r1589799 = cos(r1589794);
        double r1589800 = cos(r1589796);
        double r1589801 = r1589799 * r1589800;
        double r1589802 = lambda1;
        double r1589803 = lambda2;
        double r1589804 = r1589802 - r1589803;
        double r1589805 = cos(r1589804);
        double r1589806 = r1589801 * r1589805;
        double r1589807 = r1589798 + r1589806;
        double r1589808 = acos(r1589807);
        double r1589809 = R;
        double r1589810 = r1589808 * r1589809;
        return r1589810;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1589811 = phi1;
        double r1589812 = cos(r1589811);
        double r1589813 = phi2;
        double r1589814 = cos(r1589813);
        double r1589815 = r1589812 * r1589814;
        double r1589816 = lambda2;
        double r1589817 = cos(r1589816);
        double r1589818 = lambda1;
        double r1589819 = cos(r1589818);
        double r1589820 = r1589817 * r1589819;
        double r1589821 = sin(r1589816);
        double r1589822 = sin(r1589818);
        double r1589823 = r1589821 * r1589822;
        double r1589824 = exp(r1589823);
        double r1589825 = log(r1589824);
        double r1589826 = r1589820 + r1589825;
        double r1589827 = r1589815 * r1589826;
        double r1589828 = sin(r1589813);
        double r1589829 = sin(r1589811);
        double r1589830 = r1589828 * r1589829;
        double r1589831 = r1589827 + r1589830;
        double r1589832 = acos(r1589831);
        double r1589833 = R;
        double r1589834 = r1589832 * r1589833;
        return r1589834;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 16.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. Using strategy rm
  3. Applied cos-diff3.6

    \[\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. Using strategy rm
  5. Applied add-log-exp3.6

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

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

Reproduce

herbie shell --seed 2019151 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))