Average Error: 16.8 → 3.8
Time: 20.2s
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(\sin \phi_1 \cdot \sin \phi_2 + \left(\log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\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
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r35940 = phi1;
        double r35941 = sin(r35940);
        double r35942 = phi2;
        double r35943 = sin(r35942);
        double r35944 = r35941 * r35943;
        double r35945 = cos(r35940);
        double r35946 = cos(r35942);
        double r35947 = r35945 * r35946;
        double r35948 = lambda1;
        double r35949 = lambda2;
        double r35950 = r35948 - r35949;
        double r35951 = cos(r35950);
        double r35952 = r35947 * r35951;
        double r35953 = r35944 + r35952;
        double r35954 = acos(r35953);
        double r35955 = R;
        double r35956 = r35954 * r35955;
        return r35956;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r35957 = phi1;
        double r35958 = sin(r35957);
        double r35959 = phi2;
        double r35960 = sin(r35959);
        double r35961 = r35958 * r35960;
        double r35962 = cos(r35957);
        double r35963 = cos(r35959);
        double r35964 = r35962 * r35963;
        double r35965 = lambda1;
        double r35966 = cos(r35965);
        double r35967 = lambda2;
        double r35968 = cos(r35967);
        double r35969 = r35966 * r35968;
        double r35970 = r35964 * r35969;
        double r35971 = exp(r35970);
        double r35972 = log(r35971);
        double r35973 = sin(r35965);
        double r35974 = sin(r35967);
        double r35975 = r35973 * r35974;
        double r35976 = r35964 * r35975;
        double r35977 = r35972 + r35976;
        double r35978 = r35961 + r35977;
        double r35979 = acos(r35978);
        double r35980 = R;
        double r35981 = r35979 * r35980;
        return r35981;
}

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

    \[\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. Applied distribute-lft-in3.7

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

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

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

Reproduce

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