Average Error: 0.9 → 0.2
Time: 10.0s
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 \lambda_2\right)}{\left(\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \cos \phi_2}\]
\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 \lambda_2\right)}{\left(\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \cos \phi_2}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r47444 = lambda1;
        double r47445 = phi2;
        double r47446 = cos(r47445);
        double r47447 = lambda2;
        double r47448 = r47444 - r47447;
        double r47449 = sin(r47448);
        double r47450 = r47446 * r47449;
        double r47451 = phi1;
        double r47452 = cos(r47451);
        double r47453 = cos(r47448);
        double r47454 = r47446 * r47453;
        double r47455 = r47452 + r47454;
        double r47456 = atan2(r47450, r47455);
        double r47457 = r47444 + r47456;
        return r47457;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r47458 = lambda1;
        double r47459 = phi2;
        double r47460 = cos(r47459);
        double r47461 = sin(r47458);
        double r47462 = lambda2;
        double r47463 = cos(r47462);
        double r47464 = r47461 * r47463;
        double r47465 = cos(r47458);
        double r47466 = sin(r47462);
        double r47467 = r47465 * r47466;
        double r47468 = r47464 - r47467;
        double r47469 = r47460 * r47468;
        double r47470 = phi1;
        double r47471 = cos(r47470);
        double r47472 = r47465 * r47463;
        double r47473 = r47472 * r47460;
        double r47474 = r47471 + r47473;
        double r47475 = r47461 * r47466;
        double r47476 = exp(r47475);
        double r47477 = log(r47476);
        double r47478 = r47477 * r47460;
        double r47479 = r47474 + r47478;
        double r47480 = atan2(r47469, r47479);
        double r47481 = r47458 + r47480;
        return r47481;
}

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 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 cos-diff0.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\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)}}\]
  4. Applied distribute-rgt-in0.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\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)}}\]
  5. Applied associate-+r+0.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\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}}\]
  6. Using strategy rm
  7. Applied sin-diff0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}}{\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}\]
  8. Using strategy rm
  9. Applied add-log-exp0.2

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

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

Reproduce

herbie shell --seed 2020083 
(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)))))))