Average Error: 12.6 → 0.2
Time: 45.3s
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 \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \sin \lambda_1 \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_1\right)\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\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 \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \sin \lambda_1 \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_1\right)\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r120528 = lambda1;
        double r120529 = lambda2;
        double r120530 = r120528 - r120529;
        double r120531 = sin(r120530);
        double r120532 = phi2;
        double r120533 = cos(r120532);
        double r120534 = r120531 * r120533;
        double r120535 = phi1;
        double r120536 = cos(r120535);
        double r120537 = sin(r120532);
        double r120538 = r120536 * r120537;
        double r120539 = sin(r120535);
        double r120540 = r120539 * r120533;
        double r120541 = cos(r120530);
        double r120542 = r120540 * r120541;
        double r120543 = r120538 - r120542;
        double r120544 = atan2(r120534, r120543);
        return r120544;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r120545 = lambda1;
        double r120546 = sin(r120545);
        double r120547 = lambda2;
        double r120548 = cos(r120547);
        double r120549 = r120546 * r120548;
        double r120550 = cos(r120545);
        double r120551 = sin(r120547);
        double r120552 = r120550 * r120551;
        double r120553 = r120549 - r120552;
        double r120554 = phi2;
        double r120555 = cos(r120554);
        double r120556 = r120553 * r120555;
        double r120557 = phi1;
        double r120558 = cos(r120557);
        double r120559 = sin(r120554);
        double r120560 = r120558 * r120559;
        double r120561 = r120548 * r120550;
        double r120562 = r120561 * r120561;
        double r120563 = r120551 * r120551;
        double r120564 = r120563 * r120546;
        double r120565 = r120546 * r120564;
        double r120566 = r120562 - r120565;
        double r120567 = sin(r120557);
        double r120568 = r120567 * r120555;
        double r120569 = r120566 * r120568;
        double r120570 = -r120547;
        double r120571 = sin(r120570);
        double r120572 = r120546 * r120571;
        double r120573 = r120561 + r120572;
        double r120574 = r120569 / r120573;
        double r120575 = r120560 - r120574;
        double r120576 = atan2(r120556, r120575);
        return r120576;
}

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 12.6

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

    \[\leadsto \tan^{-1}_* \frac{\color{blue}{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \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)}\]
  4. Using strategy rm
  5. Applied sub-neg6.6

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \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 \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}}\]
  6. Applied cos-sum0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}}\]
  7. Simplified0.2

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

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

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

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

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

Reproduce

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