Average Error: 13.3 → 0.2
Time: 46.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(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\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(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r6177497 = lambda1;
        double r6177498 = lambda2;
        double r6177499 = r6177497 - r6177498;
        double r6177500 = sin(r6177499);
        double r6177501 = phi2;
        double r6177502 = cos(r6177501);
        double r6177503 = r6177500 * r6177502;
        double r6177504 = phi1;
        double r6177505 = cos(r6177504);
        double r6177506 = sin(r6177501);
        double r6177507 = r6177505 * r6177506;
        double r6177508 = sin(r6177504);
        double r6177509 = r6177508 * r6177502;
        double r6177510 = cos(r6177499);
        double r6177511 = r6177509 * r6177510;
        double r6177512 = r6177507 - r6177511;
        double r6177513 = atan2(r6177503, r6177512);
        return r6177513;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r6177514 = lambda2;
        double r6177515 = cos(r6177514);
        double r6177516 = lambda1;
        double r6177517 = sin(r6177516);
        double r6177518 = r6177515 * r6177517;
        double r6177519 = cos(r6177516);
        double r6177520 = sin(r6177514);
        double r6177521 = r6177519 * r6177520;
        double r6177522 = r6177518 - r6177521;
        double r6177523 = phi2;
        double r6177524 = cos(r6177523);
        double r6177525 = r6177522 * r6177524;
        double r6177526 = sin(r6177523);
        double r6177527 = phi1;
        double r6177528 = cos(r6177527);
        double r6177529 = r6177526 * r6177528;
        double r6177530 = r6177515 * r6177519;
        double r6177531 = sin(r6177527);
        double r6177532 = r6177524 * r6177531;
        double r6177533 = r6177530 * r6177532;
        double r6177534 = r6177520 * r6177517;
        double r6177535 = cbrt(r6177534);
        double r6177536 = r6177535 * r6177535;
        double r6177537 = r6177535 * r6177536;
        double r6177538 = r6177537 * r6177532;
        double r6177539 = r6177533 + r6177538;
        double r6177540 = r6177529 - r6177539;
        double r6177541 = atan2(r6177525, r6177540);
        return r6177541;
}

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

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

    \[\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-cube-cbrt0.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}{\left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)} \cdot \left(\sin \phi_1 \cdot \cos \phi_2\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(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}\]

Reproduce

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