Average Error: 12.9 → 0.2
Time: 26.5s
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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r104795 = lambda1;
        double r104796 = lambda2;
        double r104797 = r104795 - r104796;
        double r104798 = sin(r104797);
        double r104799 = phi2;
        double r104800 = cos(r104799);
        double r104801 = r104798 * r104800;
        double r104802 = phi1;
        double r104803 = cos(r104802);
        double r104804 = sin(r104799);
        double r104805 = r104803 * r104804;
        double r104806 = sin(r104802);
        double r104807 = r104806 * r104800;
        double r104808 = cos(r104797);
        double r104809 = r104807 * r104808;
        double r104810 = r104805 - r104809;
        double r104811 = atan2(r104801, r104810);
        return r104811;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r104812 = lambda1;
        double r104813 = sin(r104812);
        double r104814 = lambda2;
        double r104815 = cos(r104814);
        double r104816 = r104813 * r104815;
        double r104817 = cos(r104812);
        double r104818 = -r104814;
        double r104819 = sin(r104818);
        double r104820 = r104817 * r104819;
        double r104821 = r104816 + r104820;
        double r104822 = phi2;
        double r104823 = cos(r104822);
        double r104824 = r104821 * r104823;
        double r104825 = phi1;
        double r104826 = cos(r104825);
        double r104827 = sin(r104822);
        double r104828 = r104826 * r104827;
        double r104829 = sin(r104825);
        double r104830 = r104829 * r104823;
        double r104831 = r104817 * r104815;
        double r104832 = r104830 * r104831;
        double r104833 = sin(r104814);
        double r104834 = r104813 * r104833;
        double r104835 = r104834 * r104830;
        double r104836 = cbrt(r104835);
        double r104837 = r104836 * r104836;
        double r104838 = r104837 * r104836;
        double r104839 = r104832 + r104838;
        double r104840 = r104828 - r104839;
        double r104841 = atan2(r104824, r104840);
        return r104841;
}

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

    \[\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-neg12.9

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

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

    \[\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. 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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \color{blue}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right)}\]
  10. Using strategy rm
  11. Applied add-cube-cbrt0.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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \color{blue}{\left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}}\right)}\]
  12. 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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right)}\]

Reproduce

herbie shell --seed 2019351 +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))))))