Average Error: 17.2 → 3.9
Time: 1.1m
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\]
\[\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)\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
\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1608703 = phi1;
        double r1608704 = sin(r1608703);
        double r1608705 = phi2;
        double r1608706 = sin(r1608705);
        double r1608707 = r1608704 * r1608706;
        double r1608708 = cos(r1608703);
        double r1608709 = cos(r1608705);
        double r1608710 = r1608708 * r1608709;
        double r1608711 = lambda1;
        double r1608712 = lambda2;
        double r1608713 = r1608711 - r1608712;
        double r1608714 = cos(r1608713);
        double r1608715 = r1608710 * r1608714;
        double r1608716 = r1608707 + r1608715;
        double r1608717 = acos(r1608716);
        double r1608718 = R;
        double r1608719 = r1608717 * r1608718;
        return r1608719;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1608720 = atan2(1.0, 0.0);
        double r1608721 = 2.0;
        double r1608722 = r1608720 / r1608721;
        double r1608723 = phi1;
        double r1608724 = cos(r1608723);
        double r1608725 = phi2;
        double r1608726 = cos(r1608725);
        double r1608727 = lambda2;
        double r1608728 = sin(r1608727);
        double r1608729 = lambda1;
        double r1608730 = sin(r1608729);
        double r1608731 = r1608728 * r1608730;
        double r1608732 = cos(r1608729);
        double r1608733 = cos(r1608727);
        double r1608734 = r1608732 * r1608733;
        double r1608735 = r1608731 + r1608734;
        double r1608736 = r1608726 * r1608735;
        double r1608737 = r1608724 * r1608736;
        double r1608738 = sin(r1608725);
        double r1608739 = sin(r1608723);
        double r1608740 = r1608738 * r1608739;
        double r1608741 = r1608737 + r1608740;
        double r1608742 = acos(r1608741);
        double r1608743 = r1608722 - r1608742;
        double r1608744 = r1608722 - r1608743;
        double r1608745 = R;
        double r1608746 = r1608744 * r1608745;
        return r1608746;
}

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

    \[\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. Taylor expanded around inf 3.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)}\right) \cdot R\]
  5. Using strategy rm
  6. Applied acos-asin3.9

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right)} \cdot R\]
  7. Using strategy rm
  8. Applied asin-acos3.9

    \[\leadsto \left(\frac{\pi}{2} - \color{blue}{\left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\right)}\right) \cdot R\]
  9. Final simplification3.9

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

Reproduce

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