Average Error: 16.3 → 3.7
Time: 38.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(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \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)\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(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \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)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23977 = phi1;
        double r23978 = sin(r23977);
        double r23979 = phi2;
        double r23980 = sin(r23979);
        double r23981 = r23978 * r23980;
        double r23982 = cos(r23977);
        double r23983 = cos(r23979);
        double r23984 = r23982 * r23983;
        double r23985 = lambda1;
        double r23986 = lambda2;
        double r23987 = r23985 - r23986;
        double r23988 = cos(r23987);
        double r23989 = r23984 * r23988;
        double r23990 = r23981 + r23989;
        double r23991 = acos(r23990);
        double r23992 = R;
        double r23993 = r23991 * r23992;
        return r23993;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23994 = phi1;
        double r23995 = sin(r23994);
        double r23996 = phi2;
        double r23997 = sin(r23996);
        double r23998 = r23995 * r23997;
        double r23999 = exp(r23998);
        double r24000 = log(r23999);
        double r24001 = cos(r23994);
        double r24002 = cos(r23996);
        double r24003 = r24001 * r24002;
        double r24004 = lambda1;
        double r24005 = cos(r24004);
        double r24006 = lambda2;
        double r24007 = cos(r24006);
        double r24008 = r24005 * r24007;
        double r24009 = sin(r24004);
        double r24010 = sin(r24006);
        double r24011 = r24009 * r24010;
        double r24012 = r24008 + r24011;
        double r24013 = r24003 * r24012;
        double r24014 = r24000 + r24013;
        double r24015 = acos(r24014);
        double r24016 = R;
        double r24017 = r24015 * r24016;
        return r24017;
}

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.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. Using strategy rm
  3. Applied cos-diff3.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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied add-log-exp3.7

    \[\leadsto \cos^{-1} \left(\color{blue}{\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right)} + \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)\right) \cdot R\]
  6. Final simplification3.7

    \[\leadsto \cos^{-1} \left(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \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)\right) \cdot R\]

Reproduce

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