Average Error: 17.0 → 3.9
Time: 27.7s
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(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\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(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r28815 = phi1;
        double r28816 = sin(r28815);
        double r28817 = phi2;
        double r28818 = sin(r28817);
        double r28819 = r28816 * r28818;
        double r28820 = cos(r28815);
        double r28821 = cos(r28817);
        double r28822 = r28820 * r28821;
        double r28823 = lambda1;
        double r28824 = lambda2;
        double r28825 = r28823 - r28824;
        double r28826 = cos(r28825);
        double r28827 = r28822 * r28826;
        double r28828 = r28819 + r28827;
        double r28829 = acos(r28828);
        double r28830 = R;
        double r28831 = r28829 * r28830;
        return r28831;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r28832 = phi1;
        double r28833 = sin(r28832);
        double r28834 = phi2;
        double r28835 = sin(r28834);
        double r28836 = r28833 * r28835;
        double r28837 = cos(r28832);
        double r28838 = cos(r28834);
        double r28839 = r28837 * r28838;
        double r28840 = lambda1;
        double r28841 = cos(r28840);
        double r28842 = lambda2;
        double r28843 = cos(r28842);
        double r28844 = r28841 * r28843;
        double r28845 = r28839 * r28844;
        double r28846 = sin(r28840);
        double r28847 = sin(r28842);
        double r28848 = r28846 * r28847;
        double r28849 = r28839 * r28848;
        double r28850 = r28845 + r28849;
        double r28851 = r28836 + r28850;
        double r28852 = acos(r28851);
        double r28853 = R;
        double r28854 = r28852 * r28853;
        return r28854;
}

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 17.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. Using strategy rm
  3. Applied cos-diff3.9

    \[\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. Applied distribute-lft-in3.9

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

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

Reproduce

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