Average Error: 16.9 → 4.1
Time: 48.7s
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^{\frac{\pi}{2} - \sin^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) + \sin \phi_2 \cdot \sin \phi_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
\log \left(e^{\frac{\pi}{2} - \sin^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1680877 = phi1;
        double r1680878 = sin(r1680877);
        double r1680879 = phi2;
        double r1680880 = sin(r1680879);
        double r1680881 = r1680878 * r1680880;
        double r1680882 = cos(r1680877);
        double r1680883 = cos(r1680879);
        double r1680884 = r1680882 * r1680883;
        double r1680885 = lambda1;
        double r1680886 = lambda2;
        double r1680887 = r1680885 - r1680886;
        double r1680888 = cos(r1680887);
        double r1680889 = r1680884 * r1680888;
        double r1680890 = r1680881 + r1680889;
        double r1680891 = acos(r1680890);
        double r1680892 = R;
        double r1680893 = r1680891 * r1680892;
        return r1680893;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1680894 = atan2(1.0, 0.0);
        double r1680895 = 2.0;
        double r1680896 = r1680894 / r1680895;
        double r1680897 = phi2;
        double r1680898 = cos(r1680897);
        double r1680899 = phi1;
        double r1680900 = cos(r1680899);
        double r1680901 = r1680898 * r1680900;
        double r1680902 = lambda1;
        double r1680903 = sin(r1680902);
        double r1680904 = lambda2;
        double r1680905 = sin(r1680904);
        double r1680906 = r1680903 * r1680905;
        double r1680907 = cos(r1680902);
        double r1680908 = cos(r1680904);
        double r1680909 = r1680907 * r1680908;
        double r1680910 = r1680906 + r1680909;
        double r1680911 = r1680901 * r1680910;
        double r1680912 = sin(r1680897);
        double r1680913 = sin(r1680899);
        double r1680914 = r1680912 * r1680913;
        double r1680915 = r1680911 + r1680914;
        double r1680916 = asin(r1680915);
        double r1680917 = r1680896 - r1680916;
        double r1680918 = exp(r1680917);
        double r1680919 = log(r1680918);
        double r1680920 = R;
        double r1680921 = r1680919 * r1680920;
        return r1680921;
}

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

    \[\leadsto \color{blue}{\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 \lambda_2\right)\right)}\right)} \cdot R\]
  6. Using strategy rm
  7. Applied acos-asin4.1

    \[\leadsto \log \left(e^{\color{blue}{\frac{\pi}{2} - \sin^{-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 \lambda_2\right)\right)}}\right) \cdot R\]
  8. Final simplification4.1

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

Reproduce

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