Average Error: 13.4 → 0.2
Time: 14.6s
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 - \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(\log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right) + \log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\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 \lambda_2\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right) + \log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right)\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r90761 = lambda1;
        double r90762 = lambda2;
        double r90763 = r90761 - r90762;
        double r90764 = sin(r90763);
        double r90765 = phi2;
        double r90766 = cos(r90765);
        double r90767 = r90764 * r90766;
        double r90768 = phi1;
        double r90769 = cos(r90768);
        double r90770 = sin(r90765);
        double r90771 = r90769 * r90770;
        double r90772 = sin(r90768);
        double r90773 = r90772 * r90766;
        double r90774 = cos(r90763);
        double r90775 = r90773 * r90774;
        double r90776 = r90771 - r90775;
        double r90777 = atan2(r90767, r90776);
        return r90777;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r90778 = lambda1;
        double r90779 = sin(r90778);
        double r90780 = lambda2;
        double r90781 = cos(r90780);
        double r90782 = r90779 * r90781;
        double r90783 = cos(r90778);
        double r90784 = sin(r90780);
        double r90785 = r90783 * r90784;
        double r90786 = r90782 - r90785;
        double r90787 = phi2;
        double r90788 = cos(r90787);
        double r90789 = r90786 * r90788;
        double r90790 = phi1;
        double r90791 = cos(r90790);
        double r90792 = sin(r90787);
        double r90793 = r90791 * r90792;
        double r90794 = sin(r90790);
        double r90795 = r90794 * r90788;
        double r90796 = r90783 * r90781;
        double r90797 = r90795 * r90796;
        double r90798 = r90779 * r90784;
        double r90799 = exp(r90798);
        double r90800 = sqrt(r90799);
        double r90801 = log(r90800);
        double r90802 = r90801 + r90801;
        double r90803 = r90795 * r90802;
        double r90804 = r90797 + r90803;
        double r90805 = r90793 - r90804;
        double r90806 = atan2(r90789, r90805);
        return r90806;
}

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

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

    \[\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 cos-diff0.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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}}\]
  6. Applied distribute-lft-in0.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}{\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)}}\]
  7. Using strategy rm
  8. Applied add-log-exp0.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(\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 \color{blue}{\log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)}\right)}\]
  9. Using strategy rm
  10. Applied add-sqr-sqrt0.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(\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 \log \color{blue}{\left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}} \cdot \sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right)}\right)}\]
  11. Applied log-prod0.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(\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 \color{blue}{\left(\log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right) + \log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right)\right)}\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 - \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(\log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right) + \log \left(\sqrt{e^{\sin \lambda_1 \cdot \sin \lambda_2}}\right)\right)\right)}\]

Reproduce

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