Average Error: 17.0 → 3.7
Time: 1.2m
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^{\cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\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^{\cos^{-1} \left(\left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\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 r1306841 = phi1;
        double r1306842 = sin(r1306841);
        double r1306843 = phi2;
        double r1306844 = sin(r1306843);
        double r1306845 = r1306842 * r1306844;
        double r1306846 = cos(r1306841);
        double r1306847 = cos(r1306843);
        double r1306848 = r1306846 * r1306847;
        double r1306849 = lambda1;
        double r1306850 = lambda2;
        double r1306851 = r1306849 - r1306850;
        double r1306852 = cos(r1306851);
        double r1306853 = r1306848 * r1306852;
        double r1306854 = r1306845 + r1306853;
        double r1306855 = acos(r1306854);
        double r1306856 = R;
        double r1306857 = r1306855 * r1306856;
        return r1306857;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1306858 = lambda1;
        double r1306859 = sin(r1306858);
        double r1306860 = lambda2;
        double r1306861 = sin(r1306860);
        double r1306862 = r1306859 * r1306861;
        double r1306863 = cos(r1306858);
        double r1306864 = cos(r1306860);
        double r1306865 = r1306863 * r1306864;
        double r1306866 = r1306862 + r1306865;
        double r1306867 = phi2;
        double r1306868 = cos(r1306867);
        double r1306869 = phi1;
        double r1306870 = cos(r1306869);
        double r1306871 = r1306868 * r1306870;
        double r1306872 = r1306866 * r1306871;
        double r1306873 = sin(r1306867);
        double r1306874 = sin(r1306869);
        double r1306875 = r1306873 * r1306874;
        double r1306876 = r1306872 + r1306875;
        double r1306877 = acos(r1306876);
        double r1306878 = exp(r1306877);
        double r1306879 = log(r1306878);
        double r1306880 = R;
        double r1306881 = r1306879 * r1306880;
        return r1306881;
}

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

    \[\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. Using strategy rm
  5. Applied add-log-exp3.7

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

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

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

Reproduce

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