Average Error: 17.2 → 3.9
Time: 15.3s
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\]
\[e^{\mathsf{log1p}\left(\log \left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - 1}\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
e^{\mathsf{log1p}\left(\log \left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - 1}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23958 = phi1;
        double r23959 = sin(r23958);
        double r23960 = phi2;
        double r23961 = sin(r23960);
        double r23962 = r23959 * r23961;
        double r23963 = cos(r23958);
        double r23964 = cos(r23960);
        double r23965 = r23963 * r23964;
        double r23966 = lambda1;
        double r23967 = lambda2;
        double r23968 = r23966 - r23967;
        double r23969 = cos(r23968);
        double r23970 = r23965 * r23969;
        double r23971 = r23962 + r23970;
        double r23972 = acos(r23971);
        double r23973 = R;
        double r23974 = r23972 * r23973;
        return r23974;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23975 = phi1;
        double r23976 = sin(r23975);
        double r23977 = phi2;
        double r23978 = sin(r23977);
        double r23979 = r23976 * r23978;
        double r23980 = cos(r23975);
        double r23981 = cos(r23977);
        double r23982 = r23980 * r23981;
        double r23983 = lambda1;
        double r23984 = cos(r23983);
        double r23985 = lambda2;
        double r23986 = cos(r23985);
        double r23987 = r23984 * r23986;
        double r23988 = sin(r23983);
        double r23989 = -r23985;
        double r23990 = sin(r23989);
        double r23991 = r23988 * r23990;
        double r23992 = r23987 - r23991;
        double r23993 = r23982 * r23992;
        double r23994 = r23979 + r23993;
        double r23995 = acos(r23994);
        double r23996 = 1.0;
        double r23997 = r23995 - r23996;
        double r23998 = exp(r23997);
        double r23999 = log(r23998);
        double r24000 = log1p(r23999);
        double r24001 = exp(r24000);
        double r24002 = R;
        double r24003 = r24001 * r24002;
        return r24003;
}

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

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R\]
  4. Applied cos-sum3.9

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right) \cdot R\]
  5. Simplified3.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_1 \cdot \cos \lambda_2} - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied add-exp-log3.9

    \[\leadsto \color{blue}{e^{\log \left(\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)}} \cdot R\]
  8. Using strategy rm
  9. Applied log1p-expm1-u3.9

    \[\leadsto e^{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)\right)}} \cdot R\]
  10. Using strategy rm
  11. Applied add-log-exp3.9

    \[\leadsto e^{\mathsf{log1p}\left(\color{blue}{\log \left(e^{\mathsf{expm1}\left(\log \left(\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}\right)}\right)} \cdot R\]
  12. Simplified3.9

    \[\leadsto e^{\mathsf{log1p}\left(\log \color{blue}{\left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - 1}\right)}\right)} \cdot R\]
  13. Final simplification3.9

    \[\leadsto e^{\mathsf{log1p}\left(\log \left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - 1}\right)\right)} \cdot R\]

Reproduce

herbie shell --seed 2020060 +o rules:numerics
(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))