Average Error: 13.1 → 0.2
Time: 36.1s
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 - \left(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\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(\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 - \left(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r5502882 = lambda1;
        double r5502883 = lambda2;
        double r5502884 = r5502882 - r5502883;
        double r5502885 = sin(r5502884);
        double r5502886 = phi2;
        double r5502887 = cos(r5502886);
        double r5502888 = r5502885 * r5502887;
        double r5502889 = phi1;
        double r5502890 = cos(r5502889);
        double r5502891 = sin(r5502886);
        double r5502892 = r5502890 * r5502891;
        double r5502893 = sin(r5502889);
        double r5502894 = r5502893 * r5502887;
        double r5502895 = cos(r5502884);
        double r5502896 = r5502894 * r5502895;
        double r5502897 = r5502892 - r5502896;
        double r5502898 = atan2(r5502888, r5502897);
        return r5502898;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r5502899 = lambda2;
        double r5502900 = cos(r5502899);
        double r5502901 = lambda1;
        double r5502902 = sin(r5502901);
        double r5502903 = r5502900 * r5502902;
        double r5502904 = cos(r5502901);
        double r5502905 = sin(r5502899);
        double r5502906 = r5502904 * r5502905;
        double r5502907 = r5502903 - r5502906;
        double r5502908 = phi2;
        double r5502909 = cos(r5502908);
        double r5502910 = r5502907 * r5502909;
        double r5502911 = sin(r5502908);
        double r5502912 = phi1;
        double r5502913 = cos(r5502912);
        double r5502914 = r5502911 * r5502913;
        double r5502915 = r5502905 * r5502902;
        double r5502916 = sin(r5502912);
        double r5502917 = r5502909 * r5502916;
        double r5502918 = r5502915 * r5502917;
        double r5502919 = exp(r5502918);
        double r5502920 = log(r5502919);
        double r5502921 = r5502900 * r5502904;
        double r5502922 = r5502921 * r5502917;
        double r5502923 = r5502920 + r5502922;
        double r5502924 = r5502914 - r5502923;
        double r5502925 = atan2(r5502910, r5502924);
        return r5502925;
}

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 sin-diff6.9

    \[\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. Applied distribute-rgt-in0.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}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}}\]
  7. Using strategy rm
  8. Applied add-log-exp0.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(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \color{blue}{\log \left(e^{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right)}\right)}\]
  9. 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 - \left(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}\]

Reproduce

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