Average Error: 0.9 → 0.3
Time: 10.6s
Precision: 64
\[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
\[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \mathsf{fma}\left(\sin \lambda_1, \cos \phi_2 \cdot \sin \lambda_2, \cos \phi_1\right)}\]
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \mathsf{fma}\left(\sin \lambda_1, \cos \phi_2 \cdot \sin \lambda_2, \cos \phi_1\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r58587 = lambda1;
        double r58588 = phi2;
        double r58589 = cos(r58588);
        double r58590 = lambda2;
        double r58591 = r58587 - r58590;
        double r58592 = sin(r58591);
        double r58593 = r58589 * r58592;
        double r58594 = phi1;
        double r58595 = cos(r58594);
        double r58596 = cos(r58591);
        double r58597 = r58589 * r58596;
        double r58598 = r58595 + r58597;
        double r58599 = atan2(r58593, r58598);
        double r58600 = r58587 + r58599;
        return r58600;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r58601 = lambda1;
        double r58602 = phi2;
        double r58603 = cos(r58602);
        double r58604 = sin(r58601);
        double r58605 = lambda2;
        double r58606 = cos(r58605);
        double r58607 = r58604 * r58606;
        double r58608 = cos(r58601);
        double r58609 = -r58605;
        double r58610 = sin(r58609);
        double r58611 = r58608 * r58610;
        double r58612 = r58607 + r58611;
        double r58613 = r58603 * r58612;
        double r58614 = r58606 * r58603;
        double r58615 = r58608 * r58614;
        double r58616 = exp(r58615);
        double r58617 = log(r58616);
        double r58618 = sin(r58605);
        double r58619 = r58603 * r58618;
        double r58620 = phi1;
        double r58621 = cos(r58620);
        double r58622 = fma(r58604, r58619, r58621);
        double r58623 = r58617 + r58622;
        double r58624 = atan2(r58613, r58623);
        double r58625 = r58601 + r58624;
        return r58625;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 0.9

    \[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  2. Using strategy rm
  3. Applied sub-neg0.9

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\left(\sin \lambda_1 \cdot \cos \left(-\lambda_2\right) + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  5. Simplified0.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\color{blue}{\sin \lambda_1 \cdot \cos \lambda_2} + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  6. Using strategy rm
  7. Applied cos-diff0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}}\]
  8. Applied distribute-rgt-in0.2

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\color{blue}{\left(\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}}\]
  10. Simplified0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\color{blue}{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\]
  11. Using strategy rm
  12. Applied add-log-exp0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\color{blue}{\log \left(e^{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)}\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\]
  13. Using strategy rm
  14. Applied fma-udef0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\color{blue}{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right) + \cos \phi_1}}\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\]
  15. Applied exp-sum0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \color{blue}{\left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)} \cdot e^{\cos \phi_1}\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\]
  16. Applied log-prod0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\color{blue}{\left(\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \log \left(e^{\cos \phi_1}\right)\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}\]
  17. Applied associate-+l+0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\color{blue}{\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \left(\log \left(e^{\cos \phi_1}\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)}}\]
  18. Simplified0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \color{blue}{\mathsf{fma}\left(\sin \lambda_1, \cos \phi_2 \cdot \sin \lambda_2, \cos \phi_1\right)}}\]
  19. Final simplification0.3

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \phi_2\right)}\right) + \mathsf{fma}\left(\sin \lambda_1, \cos \phi_2 \cdot \sin \lambda_2, \cos \phi_1\right)}\]

Reproduce

herbie shell --seed 2019354 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Midpoint on a great circle"
  :precision binary64
  (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))