Average Error: 16.9 → 3.8
Time: 21.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\]
\[\left(\frac{\pi}{2} - \sin^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\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
\left(\frac{\pi}{2} - \sin^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r34911 = phi1;
        double r34912 = sin(r34911);
        double r34913 = phi2;
        double r34914 = sin(r34913);
        double r34915 = r34912 * r34914;
        double r34916 = cos(r34911);
        double r34917 = cos(r34913);
        double r34918 = r34916 * r34917;
        double r34919 = lambda1;
        double r34920 = lambda2;
        double r34921 = r34919 - r34920;
        double r34922 = cos(r34921);
        double r34923 = r34918 * r34922;
        double r34924 = r34915 + r34923;
        double r34925 = acos(r34924);
        double r34926 = R;
        double r34927 = r34925 * r34926;
        return r34927;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r34928 = atan2(1.0, 0.0);
        double r34929 = 2.0;
        double r34930 = r34928 / r34929;
        double r34931 = phi1;
        double r34932 = cos(r34931);
        double r34933 = phi2;
        double r34934 = cos(r34933);
        double r34935 = r34932 * r34934;
        double r34936 = lambda1;
        double r34937 = cos(r34936);
        double r34938 = lambda2;
        double r34939 = cos(r34938);
        double r34940 = r34937 * r34939;
        double r34941 = sin(r34936);
        double r34942 = sin(r34938);
        double r34943 = r34941 * r34942;
        double r34944 = r34940 + r34943;
        double r34945 = r34935 * r34944;
        double r34946 = sin(r34931);
        double r34947 = sin(r34933);
        double r34948 = r34946 * r34947;
        double r34949 = r34945 + r34948;
        double r34950 = asin(r34949);
        double r34951 = r34930 - r34950;
        double r34952 = R;
        double r34953 = r34951 * r34952;
        return r34953;
}

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.9

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
  2. Using strategy rm
  3. Applied sub-neg16.9

    \[\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 + \left(-\lambda_2\right)\right)}\right) \cdot R\]
  4. Applied cos-sum3.7

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right) \cdot R\]
  5. Simplified3.7

    \[\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_1 \cdot \cos \lambda_2} - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied acos-asin3.8

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)} \cdot R\]
  8. Simplified3.8

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

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

Reproduce

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