Average Error: 17.2 → 4.0
Time: 13.8s
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\]
\[\log \left(e^{\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)}\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
\log \left(e^{\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)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22940 = phi1;
        double r22941 = sin(r22940);
        double r22942 = phi2;
        double r22943 = sin(r22942);
        double r22944 = r22941 * r22943;
        double r22945 = cos(r22940);
        double r22946 = cos(r22942);
        double r22947 = r22945 * r22946;
        double r22948 = lambda1;
        double r22949 = lambda2;
        double r22950 = r22948 - r22949;
        double r22951 = cos(r22950);
        double r22952 = r22947 * r22951;
        double r22953 = r22944 + r22952;
        double r22954 = acos(r22953);
        double r22955 = R;
        double r22956 = r22954 * r22955;
        return r22956;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22957 = phi1;
        double r22958 = sin(r22957);
        double r22959 = phi2;
        double r22960 = sin(r22959);
        double r22961 = r22958 * r22960;
        double r22962 = cos(r22957);
        double r22963 = cos(r22959);
        double r22964 = r22962 * r22963;
        double r22965 = lambda1;
        double r22966 = cos(r22965);
        double r22967 = lambda2;
        double r22968 = cos(r22967);
        double r22969 = r22966 * r22968;
        double r22970 = r22964 * r22969;
        double r22971 = sin(r22965);
        double r22972 = sin(r22967);
        double r22973 = r22971 * r22972;
        double r22974 = r22964 * r22973;
        double r22975 = r22970 + r22974;
        double r22976 = r22961 + r22975;
        double r22977 = acos(r22976);
        double r22978 = exp(r22977);
        double r22979 = log(r22978);
        double r22980 = R;
        double r22981 = r22979 * r22980;
        return r22981;
}

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

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

    \[\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. Using strategy rm
  6. Applied add-log-exp4.0

    \[\leadsto \color{blue}{\log \left(e^{\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)}\right)} \cdot R\]
  7. Final simplification4.0

    \[\leadsto \log \left(e^{\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)}\right) \cdot R\]

Reproduce

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