Average Error: 16.7 → 4.1
Time: 52.4s
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\]
\[R \cdot \log \left(e^{\cos^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right)\]
\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
R \cdot \log \left(e^{\cos^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1433867 = phi1;
        double r1433868 = sin(r1433867);
        double r1433869 = phi2;
        double r1433870 = sin(r1433869);
        double r1433871 = r1433868 * r1433870;
        double r1433872 = cos(r1433867);
        double r1433873 = cos(r1433869);
        double r1433874 = r1433872 * r1433873;
        double r1433875 = lambda1;
        double r1433876 = lambda2;
        double r1433877 = r1433875 - r1433876;
        double r1433878 = cos(r1433877);
        double r1433879 = r1433874 * r1433878;
        double r1433880 = r1433871 + r1433879;
        double r1433881 = acos(r1433880);
        double r1433882 = R;
        double r1433883 = r1433881 * r1433882;
        return r1433883;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1433884 = R;
        double r1433885 = phi2;
        double r1433886 = cos(r1433885);
        double r1433887 = phi1;
        double r1433888 = cos(r1433887);
        double r1433889 = r1433886 * r1433888;
        double r1433890 = lambda2;
        double r1433891 = cos(r1433890);
        double r1433892 = lambda1;
        double r1433893 = cos(r1433892);
        double r1433894 = r1433891 * r1433893;
        double r1433895 = sin(r1433890);
        double r1433896 = sin(r1433892);
        double r1433897 = r1433895 * r1433896;
        double r1433898 = r1433894 + r1433897;
        double r1433899 = r1433889 * r1433898;
        double r1433900 = sin(r1433885);
        double r1433901 = sin(r1433887);
        double r1433902 = r1433900 * r1433901;
        double r1433903 = r1433899 + r1433902;
        double r1433904 = acos(r1433903);
        double r1433905 = exp(r1433904);
        double r1433906 = log(r1433905);
        double r1433907 = r1433884 * r1433906;
        return r1433907;
}

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

    \[\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.1

    \[\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.1

    \[\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 *-commutative4.1

    \[\leadsto \color{blue}{R \cdot \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)}\]
  8. Final simplification4.1

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

Reproduce

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