Average Error: 0.8 → 0.4
Time: 37.3s
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 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}{\mathsf{fma}\left(\sqrt[3]{\cos \phi_1} \cdot \sqrt[3]{\cos \phi_1}, \sqrt[3]{\cos \phi_1}, \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\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 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}{\mathsf{fma}\left(\sqrt[3]{\cos \phi_1} \cdot \sqrt[3]{\cos \phi_1}, \sqrt[3]{\cos \phi_1}, \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r3323286 = lambda1;
        double r3323287 = phi2;
        double r3323288 = cos(r3323287);
        double r3323289 = lambda2;
        double r3323290 = r3323286 - r3323289;
        double r3323291 = sin(r3323290);
        double r3323292 = r3323288 * r3323291;
        double r3323293 = phi1;
        double r3323294 = cos(r3323293);
        double r3323295 = cos(r3323290);
        double r3323296 = r3323288 * r3323295;
        double r3323297 = r3323294 + r3323296;
        double r3323298 = atan2(r3323292, r3323297);
        double r3323299 = r3323286 + r3323298;
        return r3323299;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r3323300 = lambda1;
        double r3323301 = phi2;
        double r3323302 = cos(r3323301);
        double r3323303 = sin(r3323300);
        double r3323304 = lambda2;
        double r3323305 = cos(r3323304);
        double r3323306 = r3323303 * r3323305;
        double r3323307 = cos(r3323300);
        double r3323308 = sin(r3323304);
        double r3323309 = r3323307 * r3323308;
        double r3323310 = log1p(r3323309);
        double r3323311 = expm1(r3323310);
        double r3323312 = r3323306 - r3323311;
        double r3323313 = r3323302 * r3323312;
        double r3323314 = phi1;
        double r3323315 = cos(r3323314);
        double r3323316 = cbrt(r3323315);
        double r3323317 = r3323316 * r3323316;
        double r3323318 = r3323307 * r3323305;
        double r3323319 = r3323303 * r3323308;
        double r3323320 = r3323318 + r3323319;
        double r3323321 = r3323302 * r3323320;
        double r3323322 = fma(r3323317, r3323316, r3323321);
        double r3323323 = atan2(r3323313, r3323322);
        double r3323324 = r3323300 + r3323323;
        return r3323324;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

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

    \[\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. Using strategy rm
  7. Applied expm1-log1p-u0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\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 add-cube-cbrt0.4

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}{\color{blue}{\left(\sqrt[3]{\cos \phi_1} \cdot \sqrt[3]{\cos \phi_1}\right) \cdot \sqrt[3]{\cos \phi_1}} + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  10. Applied fma-def0.4

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

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

Reproduce

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