Average Error: 17.1 → 3.9
Time: 14.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\]
\[R \cdot \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)\]
\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(\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)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r24936 = phi1;
        double r24937 = sin(r24936);
        double r24938 = phi2;
        double r24939 = sin(r24938);
        double r24940 = r24937 * r24939;
        double r24941 = cos(r24936);
        double r24942 = cos(r24938);
        double r24943 = r24941 * r24942;
        double r24944 = lambda1;
        double r24945 = lambda2;
        double r24946 = r24944 - r24945;
        double r24947 = cos(r24946);
        double r24948 = r24943 * r24947;
        double r24949 = r24940 + r24948;
        double r24950 = acos(r24949);
        double r24951 = R;
        double r24952 = r24950 * r24951;
        return r24952;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r24953 = R;
        double r24954 = phi1;
        double r24955 = sin(r24954);
        double r24956 = phi2;
        double r24957 = sin(r24956);
        double r24958 = r24955 * r24957;
        double r24959 = cos(r24954);
        double r24960 = cos(r24956);
        double r24961 = r24959 * r24960;
        double r24962 = lambda1;
        double r24963 = cos(r24962);
        double r24964 = lambda2;
        double r24965 = cos(r24964);
        double r24966 = r24963 * r24965;
        double r24967 = r24961 * r24966;
        double r24968 = sin(r24962);
        double r24969 = sin(r24964);
        double r24970 = r24968 * r24969;
        double r24971 = r24961 * r24970;
        double r24972 = r24967 + r24971;
        double r24973 = r24958 + r24972;
        double r24974 = acos(r24973);
        double r24975 = exp(r24974);
        double r24976 = log(r24975);
        double r24977 = r24953 * r24976;
        return r24977;
}

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

    \[\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.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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Applied distribute-lft-in3.9

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

    \[\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. Using strategy rm
  8. Applied *-commutative3.9

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

    \[\leadsto R \cdot \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)\]

Reproduce

herbie shell --seed 2020089 +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))