Average Error: 12.6 → 0.2
Time: 43.7s
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 \lambda_2\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 - \log \left(e^{\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 \lambda_2\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 - \log \left(e^{\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r91211 = lambda1;
        double r91212 = lambda2;
        double r91213 = r91211 - r91212;
        double r91214 = sin(r91213);
        double r91215 = phi2;
        double r91216 = cos(r91215);
        double r91217 = r91214 * r91216;
        double r91218 = phi1;
        double r91219 = cos(r91218);
        double r91220 = sin(r91215);
        double r91221 = r91219 * r91220;
        double r91222 = sin(r91218);
        double r91223 = r91222 * r91216;
        double r91224 = cos(r91213);
        double r91225 = r91223 * r91224;
        double r91226 = r91221 - r91225;
        double r91227 = atan2(r91217, r91226);
        return r91227;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r91228 = lambda1;
        double r91229 = sin(r91228);
        double r91230 = lambda2;
        double r91231 = cos(r91230);
        double r91232 = r91229 * r91231;
        double r91233 = cos(r91228);
        double r91234 = sin(r91230);
        double r91235 = r91233 * r91234;
        double r91236 = r91232 - r91235;
        double r91237 = phi2;
        double r91238 = cos(r91237);
        double r91239 = r91236 * r91238;
        double r91240 = phi1;
        double r91241 = cos(r91240);
        double r91242 = sin(r91237);
        double r91243 = r91241 * r91242;
        double r91244 = sin(r91240);
        double r91245 = r91244 * r91238;
        double r91246 = r91233 * r91231;
        double r91247 = -r91230;
        double r91248 = sin(r91247);
        double r91249 = r91229 * r91248;
        double r91250 = exp(r91249);
        double r91251 = log(r91250);
        double r91252 = r91246 - r91251;
        double r91253 = r91245 * r91252;
        double r91254 = r91243 - r91253;
        double r91255 = atan2(r91239, r91254);
        return r91255;
}

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

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

    \[\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 \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}}\]
  6. Applied cos-sum0.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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}}\]
  7. 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 - \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)}\]
  8. Using strategy rm
  9. 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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \color{blue}{\log \left(e^{\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}\right)}\right)}\]
  10. Final simplification0.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 \left(\cos \lambda_1 \cdot \cos \lambda_2 - \log \left(e^{\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}\right)\right)}\]

Reproduce

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