Average Error: 13.0 → 0.2
Time: 46.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(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\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(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r83841 = lambda1;
        double r83842 = lambda2;
        double r83843 = r83841 - r83842;
        double r83844 = sin(r83843);
        double r83845 = phi2;
        double r83846 = cos(r83845);
        double r83847 = r83844 * r83846;
        double r83848 = phi1;
        double r83849 = cos(r83848);
        double r83850 = sin(r83845);
        double r83851 = r83849 * r83850;
        double r83852 = sin(r83848);
        double r83853 = r83852 * r83846;
        double r83854 = cos(r83843);
        double r83855 = r83853 * r83854;
        double r83856 = r83851 - r83855;
        double r83857 = atan2(r83847, r83856);
        return r83857;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r83858 = lambda1;
        double r83859 = sin(r83858);
        double r83860 = lambda2;
        double r83861 = cos(r83860);
        double r83862 = r83859 * r83861;
        double r83863 = log1p(r83862);
        double r83864 = expm1(r83863);
        double r83865 = cos(r83858);
        double r83866 = -r83860;
        double r83867 = sin(r83866);
        double r83868 = r83865 * r83867;
        double r83869 = r83864 + r83868;
        double r83870 = phi2;
        double r83871 = cos(r83870);
        double r83872 = r83869 * r83871;
        double r83873 = phi1;
        double r83874 = cos(r83873);
        double r83875 = sin(r83870);
        double r83876 = r83874 * r83875;
        double r83877 = sin(r83873);
        double r83878 = r83877 * r83871;
        double r83879 = r83865 * r83861;
        double r83880 = r83859 * r83867;
        double r83881 = r83879 - r83880;
        double r83882 = r83878 * r83881;
        double r83883 = r83876 - r83882;
        double r83884 = atan2(r83872, r83883);
        return r83884;
}

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.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_1 \cdot \cos \lambda_2} - \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(\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\]
  12. Final simplification0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\]

Reproduce

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