Average Error: 0.9 → 0.2
Time: 44.1s
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)}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\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{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r2491362 = lambda1;
        double r2491363 = phi2;
        double r2491364 = cos(r2491363);
        double r2491365 = lambda2;
        double r2491366 = r2491362 - r2491365;
        double r2491367 = sin(r2491366);
        double r2491368 = r2491364 * r2491367;
        double r2491369 = phi1;
        double r2491370 = cos(r2491369);
        double r2491371 = cos(r2491366);
        double r2491372 = r2491364 * r2491371;
        double r2491373 = r2491370 + r2491372;
        double r2491374 = atan2(r2491368, r2491373);
        double r2491375 = r2491362 + r2491374;
        return r2491375;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r2491376 = lambda1;
        double r2491377 = phi2;
        double r2491378 = cos(r2491377);
        double r2491379 = sin(r2491376);
        double r2491380 = lambda2;
        double r2491381 = cos(r2491380);
        double r2491382 = r2491379 * r2491381;
        double r2491383 = cos(r2491376);
        double r2491384 = sin(r2491380);
        double r2491385 = r2491383 * r2491384;
        double r2491386 = r2491382 - r2491385;
        double r2491387 = r2491378 * r2491386;
        double r2491388 = r2491383 * r2491381;
        double r2491389 = r2491384 * r2491379;
        double r2491390 = r2491388 + r2491389;
        double r2491391 = r2491378 * r2491390;
        double r2491392 = phi1;
        double r2491393 = cos(r2491392);
        double r2491394 = r2491391 + r2491393;
        double r2491395 = atan2(r2491387, r2491394);
        double r2491396 = r2491376 + r2491395;
        return r2491396;
}

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

    \[\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)}}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  4. Using strategy rm
  5. 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 \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)}}\]
  6. 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)}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1}\]

Reproduce

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