Average Error: 24.5 → 24.6
Time: 41.9s
Precision: 64
\[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
\[\left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)
\left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r70313 = R;
        double r70314 = 2.0;
        double r70315 = phi1;
        double r70316 = phi2;
        double r70317 = r70315 - r70316;
        double r70318 = r70317 / r70314;
        double r70319 = sin(r70318);
        double r70320 = pow(r70319, r70314);
        double r70321 = cos(r70315);
        double r70322 = cos(r70316);
        double r70323 = r70321 * r70322;
        double r70324 = lambda1;
        double r70325 = lambda2;
        double r70326 = r70324 - r70325;
        double r70327 = r70326 / r70314;
        double r70328 = sin(r70327);
        double r70329 = r70323 * r70328;
        double r70330 = r70329 * r70328;
        double r70331 = r70320 + r70330;
        double r70332 = sqrt(r70331);
        double r70333 = 1.0;
        double r70334 = r70333 - r70331;
        double r70335 = sqrt(r70334);
        double r70336 = atan2(r70332, r70335);
        double r70337 = r70314 * r70336;
        double r70338 = r70313 * r70337;
        return r70338;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r70339 = R;
        double r70340 = 2.0;
        double r70341 = r70339 * r70340;
        double r70342 = phi1;
        double r70343 = cos(r70342);
        double r70344 = phi2;
        double r70345 = cos(r70344);
        double r70346 = r70343 * r70345;
        double r70347 = lambda1;
        double r70348 = lambda2;
        double r70349 = r70347 - r70348;
        double r70350 = r70349 / r70340;
        double r70351 = sin(r70350);
        double r70352 = log1p(r70351);
        double r70353 = expm1(r70352);
        double r70354 = r70351 * r70353;
        double r70355 = r70342 - r70344;
        double r70356 = r70355 / r70340;
        double r70357 = sin(r70356);
        double r70358 = pow(r70357, r70340);
        double r70359 = fma(r70346, r70354, r70358);
        double r70360 = sqrt(r70359);
        double r70361 = 1.0;
        double r70362 = exp(r70351);
        double r70363 = log(r70362);
        double r70364 = log1p(r70363);
        double r70365 = expm1(r70364);
        double r70366 = r70365 * r70363;
        double r70367 = fma(r70346, r70366, r70358);
        double r70368 = r70361 - r70367;
        double r70369 = sqrt(r70368);
        double r70370 = atan2(r70360, r70369);
        double r70371 = r70341 * r70370;
        return r70371;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 24.5

    \[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
  2. Simplified24.6

    \[\leadsto \color{blue}{\left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u24.6

    \[\leadsto \left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)}, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  5. Using strategy rm
  6. Applied add-log-exp24.6

    \[\leadsto \left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \color{blue}{\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  7. Using strategy rm
  8. Applied expm1-log1p-u24.6

    \[\leadsto \left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)} \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  9. Using strategy rm
  10. Applied add-log-exp24.6

    \[\leadsto \left(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \mathsf{expm1}\left(\mathsf{log1p}\left(\color{blue}{\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}\right)\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  11. Final simplification24.6

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

Reproduce

herbie shell --seed 2019209 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Distance on a great circle"
  :precision binary64
  (* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))