Average Error: 13.3 → 0.2
Time: 13.9s
Precision: 64
\[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
\[\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)\right)}\]
\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r118328 = lambda1;
        double r118329 = lambda2;
        double r118330 = r118328 - r118329;
        double r118331 = sin(r118330);
        double r118332 = phi2;
        double r118333 = cos(r118332);
        double r118334 = r118331 * r118333;
        double r118335 = phi1;
        double r118336 = cos(r118335);
        double r118337 = sin(r118332);
        double r118338 = r118336 * r118337;
        double r118339 = sin(r118335);
        double r118340 = r118339 * r118333;
        double r118341 = cos(r118330);
        double r118342 = r118340 * r118341;
        double r118343 = r118338 - r118342;
        double r118344 = atan2(r118334, r118343);
        return r118344;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r118345 = lambda1;
        double r118346 = sin(r118345);
        double r118347 = lambda2;
        double r118348 = cos(r118347);
        double r118349 = r118346 * r118348;
        double r118350 = cos(r118345);
        double r118351 = -r118347;
        double r118352 = sin(r118351);
        double r118353 = r118350 * r118352;
        double r118354 = r118349 + r118353;
        double r118355 = phi2;
        double r118356 = cos(r118355);
        double r118357 = r118354 * r118356;
        double r118358 = phi1;
        double r118359 = cos(r118358);
        double r118360 = sin(r118355);
        double r118361 = r118359 * r118360;
        double r118362 = sin(r118358);
        double r118363 = r118362 * r118356;
        double r118364 = r118363 * r118350;
        double r118365 = r118364 * r118348;
        double r118366 = sin(r118347);
        double r118367 = r118366 * r118346;
        double r118368 = r118356 * r118367;
        double r118369 = r118362 * r118368;
        double r118370 = r118365 + r118369;
        double r118371 = r118361 - r118370;
        double r118372 = atan2(r118357, r118371);
        return r118372;
}

Error

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 13.3

    \[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  2. Using strategy rm
  3. Applied sub-neg13.3

    \[\leadsto \tan^{-1}_* \frac{\sin \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)} \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  4. Applied sin-sum6.8

    \[\leadsto \tan^{-1}_* \frac{\color{blue}{\left(\sin \lambda_1 \cdot \cos \left(-\lambda_2\right) + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)} \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  5. Simplified6.8

    \[\leadsto \tan^{-1}_* \frac{\left(\color{blue}{\sin \lambda_1 \cdot \cos \lambda_2} + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  6. Using strategy rm
  7. Applied cos-diff0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \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)}}\]
  8. Applied distribute-lft-in0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \color{blue}{\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}\]
  9. Using strategy rm
  10. Applied associate-*r*0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\color{blue}{\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2} + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]
  11. Using strategy rm
  12. Applied associate-*l*0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \color{blue}{\sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\right)}\]
  13. Simplified0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \sin \phi_1 \cdot \color{blue}{\left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)}\right)}\]
  14. Final simplification0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)\right)}\]

Reproduce

herbie shell --seed 2020025 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Bearing on a great circle"
  :precision binary64
  (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))