Average Error: 24.2 → 24.2
Time: 51.5s
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)\]
\[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\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)
R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3804580 = R;
        double r3804581 = 2.0;
        double r3804582 = phi1;
        double r3804583 = phi2;
        double r3804584 = r3804582 - r3804583;
        double r3804585 = r3804584 / r3804581;
        double r3804586 = sin(r3804585);
        double r3804587 = pow(r3804586, r3804581);
        double r3804588 = cos(r3804582);
        double r3804589 = cos(r3804583);
        double r3804590 = r3804588 * r3804589;
        double r3804591 = lambda1;
        double r3804592 = lambda2;
        double r3804593 = r3804591 - r3804592;
        double r3804594 = r3804593 / r3804581;
        double r3804595 = sin(r3804594);
        double r3804596 = r3804590 * r3804595;
        double r3804597 = r3804596 * r3804595;
        double r3804598 = r3804587 + r3804597;
        double r3804599 = sqrt(r3804598);
        double r3804600 = 1.0;
        double r3804601 = r3804600 - r3804598;
        double r3804602 = sqrt(r3804601);
        double r3804603 = atan2(r3804599, r3804602);
        double r3804604 = r3804581 * r3804603;
        double r3804605 = r3804580 * r3804604;
        return r3804605;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3804606 = R;
        double r3804607 = 2.0;
        double r3804608 = lambda1;
        double r3804609 = lambda2;
        double r3804610 = r3804608 - r3804609;
        double r3804611 = r3804610 / r3804607;
        double r3804612 = sin(r3804611);
        double r3804613 = phi2;
        double r3804614 = cos(r3804613);
        double r3804615 = phi1;
        double r3804616 = cos(r3804615);
        double r3804617 = r3804614 * r3804616;
        double r3804618 = r3804617 * r3804612;
        double r3804619 = r3804612 * r3804618;
        double r3804620 = r3804615 - r3804613;
        double r3804621 = r3804620 / r3804607;
        double r3804622 = sin(r3804621);
        double r3804623 = pow(r3804622, r3804607);
        double r3804624 = r3804619 + r3804623;
        double r3804625 = sqrt(r3804624);
        double r3804626 = 1.0;
        double r3804627 = r3804626 - r3804624;
        double r3804628 = sqrt(r3804627);
        double r3804629 = atan2(r3804625, r3804628);
        double r3804630 = r3804607 * r3804629;
        double r3804631 = r3804606 * r3804630;
        return r3804631;
}

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 24.2

    \[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. Final simplification24.2

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

Reproduce

herbie shell --seed 2019162 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Distance on a great circle"
  (* 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))))))))))