Average Error: 13.2 → 0.2
Time: 13.4s
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(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \log \left(e^{\sin \phi_1 \cdot \cos \phi_2}\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_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 \lambda_2\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 + \log \left(e^{\sin \phi_1 \cdot \cos \phi_2}\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r101824 = lambda1;
        double r101825 = lambda2;
        double r101826 = r101824 - r101825;
        double r101827 = sin(r101826);
        double r101828 = phi2;
        double r101829 = cos(r101828);
        double r101830 = r101827 * r101829;
        double r101831 = phi1;
        double r101832 = cos(r101831);
        double r101833 = sin(r101828);
        double r101834 = r101832 * r101833;
        double r101835 = sin(r101831);
        double r101836 = r101835 * r101829;
        double r101837 = cos(r101826);
        double r101838 = r101836 * r101837;
        double r101839 = r101834 - r101838;
        double r101840 = atan2(r101830, r101839);
        return r101840;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r101841 = lambda1;
        double r101842 = sin(r101841);
        double r101843 = lambda2;
        double r101844 = cos(r101843);
        double r101845 = r101842 * r101844;
        double r101846 = cos(r101841);
        double r101847 = sin(r101843);
        double r101848 = r101846 * r101847;
        double r101849 = r101845 - r101848;
        double r101850 = phi2;
        double r101851 = cos(r101850);
        double r101852 = r101849 * r101851;
        double r101853 = phi1;
        double r101854 = cos(r101853);
        double r101855 = sin(r101850);
        double r101856 = r101854 * r101855;
        double r101857 = sin(r101853);
        double r101858 = r101857 * r101851;
        double r101859 = r101858 * r101846;
        double r101860 = r101859 * r101844;
        double r101861 = exp(r101858);
        double r101862 = log(r101861);
        double r101863 = r101842 * r101847;
        double r101864 = r101862 * r101863;
        double r101865 = r101860 + r101864;
        double r101866 = r101856 - r101865;
        double r101867 = atan2(r101852, r101866);
        return r101867;
}

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

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

    \[\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) + \color{blue}{\log \left(e^{\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 \lambda_2\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} + \log \left(e^{\sin \phi_1 \cdot \cos \phi_2}\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]
  11. 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(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \log \left(e^{\sin \phi_1 \cdot \cos \phi_2}\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]

Reproduce

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