Average Error: 16.8 → 3.6
Time: 14.3s
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(\sin \phi_1 \cdot \sin \phi_2 + \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)\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(\sin \phi_1 \cdot \sin \phi_2 + \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)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25424 = phi1;
        double r25425 = sin(r25424);
        double r25426 = phi2;
        double r25427 = sin(r25426);
        double r25428 = r25425 * r25427;
        double r25429 = cos(r25424);
        double r25430 = cos(r25426);
        double r25431 = r25429 * r25430;
        double r25432 = lambda1;
        double r25433 = lambda2;
        double r25434 = r25432 - r25433;
        double r25435 = cos(r25434);
        double r25436 = r25431 * r25435;
        double r25437 = r25428 + r25436;
        double r25438 = acos(r25437);
        double r25439 = R;
        double r25440 = r25438 * r25439;
        return r25440;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25441 = atan2(1.0, 0.0);
        double r25442 = 2.0;
        double r25443 = r25441 / r25442;
        double r25444 = phi1;
        double r25445 = sin(r25444);
        double r25446 = phi2;
        double r25447 = sin(r25446);
        double r25448 = r25445 * r25447;
        double r25449 = cos(r25444);
        double r25450 = cos(r25446);
        double r25451 = r25449 * r25450;
        double r25452 = lambda1;
        double r25453 = cos(r25452);
        double r25454 = lambda2;
        double r25455 = cos(r25454);
        double r25456 = r25453 * r25455;
        double r25457 = r25451 * r25456;
        double r25458 = sin(r25452);
        double r25459 = sin(r25454);
        double r25460 = r25458 * r25459;
        double r25461 = r25451 * r25460;
        double r25462 = r25457 + r25461;
        double r25463 = r25448 + r25462;
        double r25464 = acos(r25463);
        double r25465 = r25443 - r25464;
        double r25466 = r25443 - r25465;
        double r25467 = R;
        double r25468 = r25466 * r25467;
        return r25468;
}

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

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

    \[\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. Using strategy rm
  6. Applied acos-asin3.7

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \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)\right)} \cdot R\]
  7. Using strategy rm
  8. Applied asin-acos3.6

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

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

Reproduce

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