Average Error: 17.2 → 4.2
Time: 42.6s
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} - \sin^{-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) + \sin \phi_1 \cdot \sin \phi_2\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} - \sin^{-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) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26677 = phi1;
        double r26678 = sin(r26677);
        double r26679 = phi2;
        double r26680 = sin(r26679);
        double r26681 = r26678 * r26680;
        double r26682 = cos(r26677);
        double r26683 = cos(r26679);
        double r26684 = r26682 * r26683;
        double r26685 = lambda1;
        double r26686 = lambda2;
        double r26687 = r26685 - r26686;
        double r26688 = cos(r26687);
        double r26689 = r26684 * r26688;
        double r26690 = r26681 + r26689;
        double r26691 = acos(r26690);
        double r26692 = R;
        double r26693 = r26691 * r26692;
        return r26693;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26694 = atan2(1.0, 0.0);
        double r26695 = 2.0;
        double r26696 = r26694 / r26695;
        double r26697 = phi1;
        double r26698 = cos(r26697);
        double r26699 = phi2;
        double r26700 = cos(r26699);
        double r26701 = r26698 * r26700;
        double r26702 = lambda1;
        double r26703 = cos(r26702);
        double r26704 = lambda2;
        double r26705 = cos(r26704);
        double r26706 = r26703 * r26705;
        double r26707 = sin(r26702);
        double r26708 = sin(r26704);
        double r26709 = r26707 * r26708;
        double r26710 = r26706 + r26709;
        double r26711 = r26701 * r26710;
        double r26712 = sin(r26697);
        double r26713 = sin(r26699);
        double r26714 = r26712 * r26713;
        double r26715 = r26711 + r26714;
        double r26716 = asin(r26715);
        double r26717 = r26696 - r26716;
        double r26718 = R;
        double r26719 = r26717 * r26718;
        return r26719;
}

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

    \[\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-in4.1

    \[\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. Simplified4.1

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_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\]
  6. Simplified4.1

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

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

    \[\leadsto \left(\frac{\pi}{2} - \color{blue}{\sin^{-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) + \sin \phi_1 \cdot \sin \phi_2\right)}\right) \cdot R\]
  10. Final simplification4.2

    \[\leadsto \left(\frac{\pi}{2} - \sin^{-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) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R\]

Reproduce

herbie shell --seed 2019326 
(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))