Average Error: 0.9 → 0.2
Time: 31.8s
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{\left(\sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}\]
\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{\left(\sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r46417 = lambda1;
        double r46418 = phi2;
        double r46419 = cos(r46418);
        double r46420 = lambda2;
        double r46421 = r46417 - r46420;
        double r46422 = sin(r46421);
        double r46423 = r46419 * r46422;
        double r46424 = phi1;
        double r46425 = cos(r46424);
        double r46426 = cos(r46421);
        double r46427 = r46419 * r46426;
        double r46428 = r46425 + r46427;
        double r46429 = atan2(r46423, r46428);
        double r46430 = r46417 + r46429;
        return r46430;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r46431 = lambda1;
        double r46432 = sin(r46431);
        double r46433 = lambda2;
        double r46434 = cos(r46433);
        double r46435 = r46432 * r46434;
        double r46436 = phi2;
        double r46437 = cos(r46436);
        double r46438 = r46435 * r46437;
        double r46439 = cos(r46431);
        double r46440 = -r46433;
        double r46441 = sin(r46440);
        double r46442 = r46439 * r46441;
        double r46443 = r46442 * r46437;
        double r46444 = r46438 + r46443;
        double r46445 = sin(r46433);
        double r46446 = r46439 * r46434;
        double r46447 = fma(r46432, r46445, r46446);
        double r46448 = r46437 * r46447;
        double r46449 = phi1;
        double r46450 = cos(r46449);
        double r46451 = r46448 + r46450;
        double r46452 = atan2(r46444, r46451);
        double r46453 = r46431 + r46452;
        return r46453;
}

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. Simplified0.9

    \[\leadsto \color{blue}{\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\mathsf{fma}\left(\cos \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)}}\]
  3. Using strategy rm
  4. 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)}}{\mathsf{fma}\left(\cos \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)}\]
  5. Applied sin-sum0.8

    \[\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)}}{\mathsf{fma}\left(\cos \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)}\]
  6. Applied distribute-lft-in0.8

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

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \color{blue}{\left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}}{\mathsf{fma}\left(\cos \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)}\]
  9. Using strategy rm
  10. Applied sub-neg0.8

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

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

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

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

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

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

Reproduce

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