Average Error: 13.6 → 0.2
Time: 39.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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \frac{\cos \phi_2 \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_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)}
\tan^{-1}_* \frac{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \frac{\cos \phi_2 \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r4450640 = lambda1;
        double r4450641 = lambda2;
        double r4450642 = r4450640 - r4450641;
        double r4450643 = sin(r4450642);
        double r4450644 = phi2;
        double r4450645 = cos(r4450644);
        double r4450646 = r4450643 * r4450645;
        double r4450647 = phi1;
        double r4450648 = cos(r4450647);
        double r4450649 = sin(r4450644);
        double r4450650 = r4450648 * r4450649;
        double r4450651 = sin(r4450647);
        double r4450652 = r4450651 * r4450645;
        double r4450653 = cos(r4450642);
        double r4450654 = r4450652 * r4450653;
        double r4450655 = r4450650 - r4450654;
        double r4450656 = atan2(r4450646, r4450655);
        return r4450656;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r4450657 = lambda2;
        double r4450658 = cos(r4450657);
        double r4450659 = lambda1;
        double r4450660 = sin(r4450659);
        double r4450661 = r4450658 * r4450660;
        double r4450662 = cos(r4450659);
        double r4450663 = sin(r4450657);
        double r4450664 = r4450662 * r4450663;
        double r4450665 = r4450661 - r4450664;
        double r4450666 = phi2;
        double r4450667 = cos(r4450666);
        double r4450668 = r4450665 * r4450667;
        double r4450669 = sin(r4450666);
        double r4450670 = phi1;
        double r4450671 = cos(r4450670);
        double r4450672 = r4450669 * r4450671;
        double r4450673 = r4450658 * r4450662;
        double r4450674 = r4450663 * r4450660;
        double r4450675 = r4450673 - r4450674;
        double r4450676 = sin(r4450670);
        double r4450677 = fma(r4450663, r4450660, r4450673);
        double r4450678 = r4450676 * r4450677;
        double r4450679 = r4450675 * r4450678;
        double r4450680 = r4450667 * r4450679;
        double r4450681 = r4450680 / r4450675;
        double r4450682 = r4450672 - r4450681;
        double r4450683 = atan2(r4450668, r4450682);
        return r4450683;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 13.6

    \[\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. Using strategy rm
  7. Applied flip-+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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}}\]
  8. 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 - \color{blue}{\frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}}\]
  9. Taylor expanded around inf 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 - \color{blue}{\frac{\sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left({\left(\cos \lambda_1\right)}^{2} \cdot {\left(\cos \lambda_2\right)}^{2} - {\left(\sin \lambda_2\right)}^{2} \cdot {\left(\sin \lambda_1\right)}^{2}\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_2 \cdot \sin \lambda_1}}}\]
  10. Simplified0.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}{\frac{\left(\left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \cos \phi_2}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}}\]
  11. Final simplification0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \frac{\cos \phi_2 \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Bearing on a great circle"
  (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))