Average Error: 16.9 → 4.0
Time: 1.1m
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(\log \left(e^{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\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(\log \left(e^{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right) + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1169928 = phi1;
        double r1169929 = sin(r1169928);
        double r1169930 = phi2;
        double r1169931 = sin(r1169930);
        double r1169932 = r1169929 * r1169931;
        double r1169933 = cos(r1169928);
        double r1169934 = cos(r1169930);
        double r1169935 = r1169933 * r1169934;
        double r1169936 = lambda1;
        double r1169937 = lambda2;
        double r1169938 = r1169936 - r1169937;
        double r1169939 = cos(r1169938);
        double r1169940 = r1169935 * r1169939;
        double r1169941 = r1169932 + r1169940;
        double r1169942 = acos(r1169941);
        double r1169943 = R;
        double r1169944 = r1169942 * r1169943;
        return r1169944;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1169945 = lambda1;
        double r1169946 = sin(r1169945);
        double r1169947 = lambda2;
        double r1169948 = sin(r1169947);
        double r1169949 = r1169946 * r1169948;
        double r1169950 = phi1;
        double r1169951 = cos(r1169950);
        double r1169952 = phi2;
        double r1169953 = cos(r1169952);
        double r1169954 = r1169951 * r1169953;
        double r1169955 = r1169949 * r1169954;
        double r1169956 = exp(r1169955);
        double r1169957 = log(r1169956);
        double r1169958 = cos(r1169947);
        double r1169959 = r1169954 * r1169958;
        double r1169960 = cos(r1169945);
        double r1169961 = r1169959 * r1169960;
        double r1169962 = r1169957 + r1169961;
        double r1169963 = sin(r1169952);
        double r1169964 = sin(r1169950);
        double r1169965 = r1169963 * r1169964;
        double r1169966 = r1169962 + r1169965;
        double r1169967 = acos(r1169966);
        double r1169968 = R;
        double r1169969 = r1169967 * r1169968;
        return r1169969;
}

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 cos-diff4.0

    \[\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-rgt-in4.0

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)}\right) \cdot R\]
  5. Using strategy rm
  6. Applied associate-*l*4.0

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right) \cdot R\]
  7. Using strategy rm
  8. Applied add-log-exp4.0

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

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

Reproduce

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