Average Error: 13.0 → 0.2
Time: 14.7s
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(\left(\sin \phi_1 \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \sqrt[3]{\cos \phi_2}\right)\right) \cdot \sqrt[3]{\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 \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(\left(\sin \phi_1 \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \sqrt[3]{\cos \phi_2}\right)\right) \cdot \sqrt[3]{\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 r112795 = lambda1;
        double r112796 = lambda2;
        double r112797 = r112795 - r112796;
        double r112798 = sin(r112797);
        double r112799 = phi2;
        double r112800 = cos(r112799);
        double r112801 = r112798 * r112800;
        double r112802 = phi1;
        double r112803 = cos(r112802);
        double r112804 = sin(r112799);
        double r112805 = r112803 * r112804;
        double r112806 = sin(r112802);
        double r112807 = r112806 * r112800;
        double r112808 = cos(r112797);
        double r112809 = r112807 * r112808;
        double r112810 = r112805 - r112809;
        double r112811 = atan2(r112801, r112810);
        return r112811;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r112812 = lambda1;
        double r112813 = sin(r112812);
        double r112814 = lambda2;
        double r112815 = cos(r112814);
        double r112816 = r112813 * r112815;
        double r112817 = cos(r112812);
        double r112818 = -r112814;
        double r112819 = sin(r112818);
        double r112820 = r112817 * r112819;
        double r112821 = r112816 + r112820;
        double r112822 = phi2;
        double r112823 = cos(r112822);
        double r112824 = r112821 * r112823;
        double r112825 = phi1;
        double r112826 = cos(r112825);
        double r112827 = sin(r112822);
        double r112828 = r112826 * r112827;
        double r112829 = sin(r112825);
        double r112830 = r112829 * r112823;
        double r112831 = r112817 * r112815;
        double r112832 = r112830 * r112831;
        double r112833 = cbrt(r112823);
        double r112834 = r112833 * r112833;
        double r112835 = r112829 * r112834;
        double r112836 = r112835 * r112833;
        double r112837 = sin(r112814);
        double r112838 = r112813 * r112837;
        double r112839 = r112836 * r112838;
        double r112840 = r112832 + r112839;
        double r112841 = r112828 - r112840;
        double r112842 = atan2(r112824, r112841);
        return r112842;
}

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

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

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

Reproduce

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