Average Error: 16.8 → 3.8
Time: 43.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\]
\[\cos^{-1} \left(\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) + \log \left(e^{\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
\cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r951603 = phi1;
        double r951604 = sin(r951603);
        double r951605 = phi2;
        double r951606 = sin(r951605);
        double r951607 = r951604 * r951606;
        double r951608 = cos(r951603);
        double r951609 = cos(r951605);
        double r951610 = r951608 * r951609;
        double r951611 = lambda1;
        double r951612 = lambda2;
        double r951613 = r951611 - r951612;
        double r951614 = cos(r951613);
        double r951615 = r951610 * r951614;
        double r951616 = r951607 + r951615;
        double r951617 = acos(r951616);
        double r951618 = R;
        double r951619 = r951617 * r951618;
        return r951619;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r951620 = phi1;
        double r951621 = cos(r951620);
        double r951622 = phi2;
        double r951623 = cos(r951622);
        double r951624 = r951621 * r951623;
        double r951625 = lambda1;
        double r951626 = cos(r951625);
        double r951627 = lambda2;
        double r951628 = cos(r951627);
        double r951629 = r951626 * r951628;
        double r951630 = sin(r951625);
        double r951631 = sin(r951627);
        double r951632 = r951630 * r951631;
        double r951633 = r951629 + r951632;
        double r951634 = r951624 * r951633;
        double r951635 = sin(r951622);
        double r951636 = sin(r951620);
        double r951637 = r951635 * r951636;
        double r951638 = exp(r951637);
        double r951639 = log(r951638);
        double r951640 = r951634 + r951639;
        double r951641 = acos(r951640);
        double r951642 = R;
        double r951643 = r951641 * r951642;
        return r951643;
}

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

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

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

    \[\leadsto \cos^{-1} \left(\color{blue}{\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right)} + \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) \cdot R\]
  6. Final simplification3.8

    \[\leadsto \cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R\]

Reproduce

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