Average Error: 16.4 → 3.8
Time: 49.9s
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 r468965 = phi1;
        double r468966 = sin(r468965);
        double r468967 = phi2;
        double r468968 = sin(r468967);
        double r468969 = r468966 * r468968;
        double r468970 = cos(r468965);
        double r468971 = cos(r468967);
        double r468972 = r468970 * r468971;
        double r468973 = lambda1;
        double r468974 = lambda2;
        double r468975 = r468973 - r468974;
        double r468976 = cos(r468975);
        double r468977 = r468972 * r468976;
        double r468978 = r468969 + r468977;
        double r468979 = acos(r468978);
        double r468980 = R;
        double r468981 = r468979 * r468980;
        return r468981;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r468982 = phi1;
        double r468983 = cos(r468982);
        double r468984 = phi2;
        double r468985 = cos(r468984);
        double r468986 = r468983 * r468985;
        double r468987 = lambda2;
        double r468988 = cos(r468987);
        double r468989 = lambda1;
        double r468990 = cos(r468989);
        double r468991 = r468988 * r468990;
        double r468992 = sin(r468987);
        double r468993 = sin(r468989);
        double r468994 = r468992 * r468993;
        double r468995 = exp(r468994);
        double r468996 = log(r468995);
        double r468997 = r468991 + r468996;
        double r468998 = r468986 * r468997;
        double r468999 = sin(r468984);
        double r469000 = sin(r468982);
        double r469001 = r468999 * r469000;
        double r469002 = r468998 + r469001;
        double r469003 = acos(r469002);
        double r469004 = R;
        double r469005 = r469003 * r469004;
        return r469005;
}

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

    \[\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.8

    \[\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 2019142 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))