Average Error: 0.8 → 0.2
Time: 11.4s
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)}{\left(\cos \phi_1 + \frac{{\left(\cos \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\cos \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) - \frac{{\left(\sin \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\sin \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_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 \left(-\lambda_2\right)\right)}{\left(\cos \phi_1 + \frac{{\left(\cos \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\cos \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) - \frac{{\left(\sin \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\sin \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r59507 = lambda1;
        double r59508 = phi2;
        double r59509 = cos(r59508);
        double r59510 = lambda2;
        double r59511 = r59507 - r59510;
        double r59512 = sin(r59511);
        double r59513 = r59509 * r59512;
        double r59514 = phi1;
        double r59515 = cos(r59514);
        double r59516 = cos(r59511);
        double r59517 = r59509 * r59516;
        double r59518 = r59515 + r59517;
        double r59519 = atan2(r59513, r59518);
        double r59520 = r59507 + r59519;
        return r59520;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r59521 = lambda1;
        double r59522 = phi2;
        double r59523 = cos(r59522);
        double r59524 = sin(r59521);
        double r59525 = lambda2;
        double r59526 = cos(r59525);
        double r59527 = r59524 * r59526;
        double r59528 = cos(r59521);
        double r59529 = -r59525;
        double r59530 = sin(r59529);
        double r59531 = r59528 * r59530;
        double r59532 = r59527 + r59531;
        double r59533 = r59523 * r59532;
        double r59534 = phi1;
        double r59535 = cos(r59534);
        double r59536 = 2.0;
        double r59537 = pow(r59528, r59536);
        double r59538 = pow(r59526, r59536);
        double r59539 = r59523 * r59538;
        double r59540 = r59537 * r59539;
        double r59541 = r59528 * r59526;
        double r59542 = sin(r59525);
        double r59543 = r59524 * r59542;
        double r59544 = r59541 - r59543;
        double r59545 = r59540 / r59544;
        double r59546 = r59535 + r59545;
        double r59547 = pow(r59524, r59536);
        double r59548 = pow(r59542, r59536);
        double r59549 = r59523 * r59548;
        double r59550 = r59547 * r59549;
        double r59551 = r59550 / r59544;
        double r59552 = r59546 - r59551;
        double r59553 = atan2(r59533, r59552);
        double r59554 = r59521 + r59553;
        return r59554;
}

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

    \[\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.8

    \[\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. Using strategy rm
  5. Applied sub-neg0.8

    \[\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  6. Applied sin-sum0.2

    \[\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  7. Simplified0.2

    \[\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 \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  8. Using strategy rm
  9. Applied flip-+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)}{\cos \phi_1 + \cos \phi_2 \cdot \color{blue}{\frac{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}}\]
  10. Taylor expanded around inf 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 + \frac{{\left(\cos \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\cos \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) - \frac{{\left(\sin \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\sin \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}}\]
  11. 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 \left(-\lambda_2\right)\right)}{\left(\cos \phi_1 + \frac{{\left(\cos \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\cos \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) - \frac{{\left(\sin \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\sin \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}\]

Reproduce

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