Average Error: 13.1 → 0.2
Time: 19.2s
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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sqrt[3]{{\left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}\right)}^{3}} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sqrt[3]{{\left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}\right)}^{3}} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r101651 = lambda1;
        double r101652 = lambda2;
        double r101653 = r101651 - r101652;
        double r101654 = sin(r101653);
        double r101655 = phi2;
        double r101656 = cos(r101655);
        double r101657 = r101654 * r101656;
        double r101658 = phi1;
        double r101659 = cos(r101658);
        double r101660 = sin(r101655);
        double r101661 = r101659 * r101660;
        double r101662 = sin(r101658);
        double r101663 = r101662 * r101656;
        double r101664 = cos(r101653);
        double r101665 = r101663 * r101664;
        double r101666 = r101661 - r101665;
        double r101667 = atan2(r101657, r101666);
        return r101667;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r101668 = lambda1;
        double r101669 = sin(r101668);
        double r101670 = lambda2;
        double r101671 = cos(r101670);
        double r101672 = r101669 * r101671;
        double r101673 = cos(r101668);
        double r101674 = -r101670;
        double r101675 = sin(r101674);
        double r101676 = r101673 * r101675;
        double r101677 = r101672 + r101676;
        double r101678 = phi2;
        double r101679 = cos(r101678);
        double r101680 = r101677 * r101679;
        double r101681 = phi1;
        double r101682 = cos(r101681);
        double r101683 = sin(r101678);
        double r101684 = r101682 * r101683;
        double r101685 = sin(r101681);
        double r101686 = r101685 * r101679;
        double r101687 = r101671 * r101673;
        double r101688 = 3.0;
        double r101689 = pow(r101687, r101688);
        double r101690 = pow(r101689, r101688);
        double r101691 = cbrt(r101690);
        double r101692 = r101669 * r101675;
        double r101693 = pow(r101692, r101688);
        double r101694 = r101691 - r101693;
        double r101695 = r101686 * r101694;
        double r101696 = r101687 * r101687;
        double r101697 = r101692 * r101692;
        double r101698 = r101687 * r101692;
        double r101699 = r101697 + r101698;
        double r101700 = r101696 + r101699;
        double r101701 = r101695 / r101700;
        double r101702 = r101684 - r101701;
        double r101703 = atan2(r101680, r101702);
        return r101703;
}

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

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

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

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

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

    \[\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 \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}}\]
  8. Applied cos-sum0.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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\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(\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)}\]
  10. Using strategy rm
  11. Applied flip3--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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{{\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}}\]
  12. 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 - \color{blue}{\frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}}\]
  13. Using strategy rm
  14. Applied add-cbrt-cube0.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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\sqrt[3]{\left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3} \cdot {\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}\right) \cdot {\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}}} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}\]
  15. 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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sqrt[3]{\color{blue}{{\left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}\right)}^{3}}} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}\]
  16. 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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sqrt[3]{{\left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3}\right)}^{3}} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}\]

Reproduce

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