Average Error: 17.0 → 3.6
Time: 45.0s
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 e^{\log \left(\log \left(e^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\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 e^{\log \left(\log \left(e^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right)\right)}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r991695 = phi1;
        double r991696 = sin(r991695);
        double r991697 = phi2;
        double r991698 = sin(r991697);
        double r991699 = r991696 * r991698;
        double r991700 = cos(r991695);
        double r991701 = cos(r991697);
        double r991702 = r991700 * r991701;
        double r991703 = lambda1;
        double r991704 = lambda2;
        double r991705 = r991703 - r991704;
        double r991706 = cos(r991705);
        double r991707 = r991702 * r991706;
        double r991708 = r991699 + r991707;
        double r991709 = acos(r991708);
        double r991710 = R;
        double r991711 = r991709 * r991710;
        return r991711;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r991712 = R;
        double r991713 = phi1;
        double r991714 = cos(r991713);
        double r991715 = phi2;
        double r991716 = cos(r991715);
        double r991717 = r991714 * r991716;
        double r991718 = lambda2;
        double r991719 = sin(r991718);
        double r991720 = lambda1;
        double r991721 = sin(r991720);
        double r991722 = r991719 * r991721;
        double r991723 = cos(r991718);
        double r991724 = cos(r991720);
        double r991725 = r991723 * r991724;
        double r991726 = r991722 + r991725;
        double r991727 = r991717 * r991726;
        double r991728 = sin(r991715);
        double r991729 = sin(r991713);
        double r991730 = r991728 * r991729;
        double r991731 = r991727 + r991730;
        double r991732 = acos(r991731);
        double r991733 = exp(r991732);
        double r991734 = log(r991733);
        double r991735 = log(r991734);
        double r991736 = exp(r991735);
        double r991737 = r991712 * r991736;
        return r991737;
}

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

    \[\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-exp-log3.6

    \[\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 \lambda_2\right)\right)\right)}} \cdot R\]
  6. Using strategy rm
  7. Applied add-log-exp3.6

    \[\leadsto e^{\log \color{blue}{\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 \lambda_2\right)\right)}\right)\right)}} \cdot R\]
  8. Final simplification3.6

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

Reproduce

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