Average Error: 13.2 → 0.2
Time: 41.2s
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(\sqrt[3]{\cos \lambda_2} \cdot \left(\sin \lambda_1 \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2}\right)\right) - \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(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sin \lambda_2 \cdot \sin \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(\sqrt[3]{\cos \lambda_2} \cdot \left(\sin \lambda_1 \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2}\right)\right) - \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(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sin \lambda_2 \cdot \sin \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 r3755420 = lambda1;
        double r3755421 = lambda2;
        double r3755422 = r3755420 - r3755421;
        double r3755423 = sin(r3755422);
        double r3755424 = phi2;
        double r3755425 = cos(r3755424);
        double r3755426 = r3755423 * r3755425;
        double r3755427 = phi1;
        double r3755428 = cos(r3755427);
        double r3755429 = sin(r3755424);
        double r3755430 = r3755428 * r3755429;
        double r3755431 = sin(r3755427);
        double r3755432 = r3755431 * r3755425;
        double r3755433 = cos(r3755422);
        double r3755434 = r3755432 * r3755433;
        double r3755435 = r3755430 - r3755434;
        double r3755436 = atan2(r3755426, r3755435);
        return r3755436;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r3755437 = lambda2;
        double r3755438 = cos(r3755437);
        double r3755439 = cbrt(r3755438);
        double r3755440 = lambda1;
        double r3755441 = sin(r3755440);
        double r3755442 = expm1(r3755439);
        double r3755443 = log1p(r3755442);
        double r3755444 = r3755443 * r3755439;
        double r3755445 = r3755441 * r3755444;
        double r3755446 = r3755439 * r3755445;
        double r3755447 = cos(r3755440);
        double r3755448 = sin(r3755437);
        double r3755449 = r3755447 * r3755448;
        double r3755450 = r3755446 - r3755449;
        double r3755451 = phi2;
        double r3755452 = cos(r3755451);
        double r3755453 = r3755450 * r3755452;
        double r3755454 = phi1;
        double r3755455 = cos(r3755454);
        double r3755456 = sin(r3755451);
        double r3755457 = r3755455 * r3755456;
        double r3755458 = r3755447 * r3755438;
        double r3755459 = sin(r3755454);
        double r3755460 = r3755452 * r3755459;
        double r3755461 = r3755458 * r3755460;
        double r3755462 = r3755448 * r3755441;
        double r3755463 = r3755462 * r3755460;
        double r3755464 = r3755461 + r3755463;
        double r3755465 = r3755457 - r3755464;
        double r3755466 = atan2(r3755453, r3755465);
        return r3755466;
}

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

    \[\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-lft-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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}\]
  7. Using strategy rm
  8. Applied add-cube-cbrt0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \color{blue}{\left(\left(\sqrt[3]{\cos \lambda_2} \cdot \sqrt[3]{\cos \lambda_2}\right) \cdot \sqrt[3]{\cos \lambda_2}\right)} - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]
  9. Applied associate-*r*0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\color{blue}{\left(\sin \lambda_1 \cdot \left(\sqrt[3]{\cos \lambda_2} \cdot \sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2}} - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]
  10. Using strategy rm
  11. Applied log1p-expm1-u0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\left(\sin \lambda_1 \cdot \left(\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\cos \lambda_2}\right)\right)} \cdot \sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2} - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\]
  12. Final simplification0.2

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

Reproduce

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