Average Error: 13.0 → 0.2
Time: 35.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(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \mathsf{expm1}\left(\mathsf{log1p}\left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \mathsf{expm1}\left(\mathsf{log1p}\left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r84701 = lambda1;
        double r84702 = lambda2;
        double r84703 = r84701 - r84702;
        double r84704 = sin(r84703);
        double r84705 = phi2;
        double r84706 = cos(r84705);
        double r84707 = r84704 * r84706;
        double r84708 = phi1;
        double r84709 = cos(r84708);
        double r84710 = sin(r84705);
        double r84711 = r84709 * r84710;
        double r84712 = sin(r84708);
        double r84713 = r84712 * r84706;
        double r84714 = cos(r84703);
        double r84715 = r84713 * r84714;
        double r84716 = r84711 - r84715;
        double r84717 = atan2(r84707, r84716);
        return r84717;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r84718 = lambda1;
        double r84719 = sin(r84718);
        double r84720 = lambda2;
        double r84721 = cos(r84720);
        double r84722 = r84719 * r84721;
        double r84723 = cos(r84718);
        double r84724 = -r84720;
        double r84725 = sin(r84724);
        double r84726 = r84723 * r84725;
        double r84727 = r84722 + r84726;
        double r84728 = phi2;
        double r84729 = cos(r84728);
        double r84730 = r84727 * r84729;
        double r84731 = phi1;
        double r84732 = cos(r84731);
        double r84733 = sin(r84728);
        double r84734 = r84732 * r84733;
        double r84735 = log1p(r84734);
        double r84736 = expm1(r84735);
        double r84737 = sin(r84720);
        double r84738 = r84719 * r84737;
        double r84739 = fma(r84723, r84721, r84738);
        double r84740 = sin(r84731);
        double r84741 = r84739 * r84740;
        double r84742 = r84741 * r84729;
        double r84743 = log1p(r84742);
        double r84744 = expm1(r84743);
        double r84745 = r84736 - r84744;
        double r84746 = atan2(r84730, r84745);
        return r84746;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

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

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

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

    \[\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 expm1-log1p-u0.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}{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right)} - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\]
  12. Using strategy rm
  13. Applied expm1-log1p-u0.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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)}}\]
  14. 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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2\right)}\right)}\]
  15. 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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \mathsf{expm1}\left(\mathsf{log1p}\left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2\right)\right)}\]

Reproduce

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