Average Error: 39.2 → 4.0
Time: 27.8s
Precision: 64
\[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
\[R \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right), \phi_1 - \phi_2\right)\]
R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
R \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right), \phi_1 - \phi_2\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3579402 = R;
        double r3579403 = lambda1;
        double r3579404 = lambda2;
        double r3579405 = r3579403 - r3579404;
        double r3579406 = phi1;
        double r3579407 = phi2;
        double r3579408 = r3579406 + r3579407;
        double r3579409 = 2.0;
        double r3579410 = r3579408 / r3579409;
        double r3579411 = cos(r3579410);
        double r3579412 = r3579405 * r3579411;
        double r3579413 = r3579412 * r3579412;
        double r3579414 = r3579406 - r3579407;
        double r3579415 = r3579414 * r3579414;
        double r3579416 = r3579413 + r3579415;
        double r3579417 = sqrt(r3579416);
        double r3579418 = r3579402 * r3579417;
        return r3579418;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3579419 = R;
        double r3579420 = lambda1;
        double r3579421 = lambda2;
        double r3579422 = r3579420 - r3579421;
        double r3579423 = phi2;
        double r3579424 = phi1;
        double r3579425 = r3579423 + r3579424;
        double r3579426 = 2.0;
        double r3579427 = r3579425 / r3579426;
        double r3579428 = cos(r3579427);
        double r3579429 = exp(r3579428);
        double r3579430 = log(r3579429);
        double r3579431 = r3579422 * r3579430;
        double r3579432 = r3579424 - r3579423;
        double r3579433 = hypot(r3579431, r3579432);
        double r3579434 = r3579419 * r3579433;
        return r3579434;
}

Error

Bits error versus R

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 39.2

    \[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
  2. Simplified3.9

    \[\leadsto \color{blue}{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot R}\]
  3. Using strategy rm
  4. Applied log1p-expm1-u3.9

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right)}, \phi_1 - \phi_2\right) \cdot R\]
  5. Using strategy rm
  6. Applied add-cbrt-cube4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\sqrt[3]{\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right)\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right)}}, \phi_1 - \phi_2\right) \cdot R\]
  7. Simplified4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\color{blue}{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}}, \phi_1 - \phi_2\right) \cdot R\]
  8. Using strategy rm
  9. Applied add-log-exp4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\log \left(e^{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}}\right)}, \phi_1 - \phi_2\right) \cdot R\]
  10. Simplified4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \color{blue}{\left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)}, \phi_1 - \phi_2\right) \cdot R\]
  11. Final simplification4.0

    \[\leadsto R \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right), \phi_1 - \phi_2\right)\]

Reproduce

herbie shell --seed 2019170 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))