Average Error: 13.1 → 0.2
Time: 38.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(\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(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sin \lambda_2 \cdot \sqrt[3]{\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(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sin \lambda_2 \cdot \sqrt[3]{\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 r5046533 = lambda1;
        double r5046534 = lambda2;
        double r5046535 = r5046533 - r5046534;
        double r5046536 = sin(r5046535);
        double r5046537 = phi2;
        double r5046538 = cos(r5046537);
        double r5046539 = r5046536 * r5046538;
        double r5046540 = phi1;
        double r5046541 = cos(r5046540);
        double r5046542 = sin(r5046537);
        double r5046543 = r5046541 * r5046542;
        double r5046544 = sin(r5046540);
        double r5046545 = r5046544 * r5046538;
        double r5046546 = cos(r5046535);
        double r5046547 = r5046545 * r5046546;
        double r5046548 = r5046543 - r5046547;
        double r5046549 = atan2(r5046539, r5046548);
        return r5046549;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r5046550 = lambda2;
        double r5046551 = cos(r5046550);
        double r5046552 = lambda1;
        double r5046553 = sin(r5046552);
        double r5046554 = r5046551 * r5046553;
        double r5046555 = cos(r5046552);
        double r5046556 = sin(r5046550);
        double r5046557 = r5046555 * r5046556;
        double r5046558 = r5046554 - r5046557;
        double r5046559 = phi2;
        double r5046560 = cos(r5046559);
        double r5046561 = r5046558 * r5046560;
        double r5046562 = sin(r5046559);
        double r5046563 = phi1;
        double r5046564 = cos(r5046563);
        double r5046565 = r5046562 * r5046564;
        double r5046566 = r5046551 * r5046555;
        double r5046567 = sin(r5046563);
        double r5046568 = r5046560 * r5046567;
        double r5046569 = r5046566 * r5046568;
        double r5046570 = cbrt(r5046553);
        double r5046571 = r5046570 * r5046570;
        double r5046572 = r5046556 * r5046570;
        double r5046573 = r5046571 * r5046572;
        double r5046574 = r5046573 * r5046568;
        double r5046575 = r5046569 + r5046574;
        double r5046576 = r5046565 - r5046575;
        double r5046577 = atan2(r5046561, r5046576);
        return r5046577;
}

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.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 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) + \left(\color{blue}{\left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \sqrt[3]{\sin \lambda_1}\right)} \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}\]
  9. Applied associate-*l*0.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 \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sqrt[3]{\sin \lambda_1} \cdot \sin \lambda_2\right)\right)} \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}\]
  10. 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(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sin \lambda_2 \cdot \sqrt[3]{\sin \lambda_1}\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}\]

Reproduce

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