Average Error: 24.1 → 24.1
Time: 51.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)\]
\[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 r2766636 = R;
        double r2766637 = 2.0;
        double r2766638 = phi1;
        double r2766639 = phi2;
        double r2766640 = r2766638 - r2766639;
        double r2766641 = r2766640 / r2766637;
        double r2766642 = sin(r2766641);
        double r2766643 = pow(r2766642, r2766637);
        double r2766644 = cos(r2766638);
        double r2766645 = cos(r2766639);
        double r2766646 = r2766644 * r2766645;
        double r2766647 = lambda1;
        double r2766648 = lambda2;
        double r2766649 = r2766647 - r2766648;
        double r2766650 = r2766649 / r2766637;
        double r2766651 = sin(r2766650);
        double r2766652 = r2766646 * r2766651;
        double r2766653 = r2766652 * r2766651;
        double r2766654 = r2766643 + r2766653;
        double r2766655 = sqrt(r2766654);
        double r2766656 = 1.0;
        double r2766657 = r2766656 - r2766654;
        double r2766658 = sqrt(r2766657);
        double r2766659 = atan2(r2766655, r2766658);
        double r2766660 = r2766637 * r2766659;
        double r2766661 = r2766636 * r2766660;
        return r2766661;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2766662 = R;
        double r2766663 = 2.0;
        double r2766664 = lambda1;
        double r2766665 = lambda2;
        double r2766666 = r2766664 - r2766665;
        double r2766667 = r2766666 / r2766663;
        double r2766668 = sin(r2766667);
        double r2766669 = phi2;
        double r2766670 = cos(r2766669);
        double r2766671 = phi1;
        double r2766672 = cos(r2766671);
        double r2766673 = r2766670 * r2766672;
        double r2766674 = r2766673 * r2766668;
        double r2766675 = r2766668 * r2766674;
        double r2766676 = r2766671 - r2766669;
        double r2766677 = r2766676 / r2766663;
        double r2766678 = sin(r2766677);
        double r2766679 = pow(r2766678, r2766663);
        double r2766680 = r2766675 + r2766679;
        double r2766681 = sqrt(r2766680);
        double r2766682 = 1.0;
        double r2766683 = r2766682 - r2766680;
        double r2766684 = sqrt(r2766683);
        double r2766685 = atan2(r2766681, r2766684);
        double r2766686 = r2766663 * r2766685;
        double r2766687 = r2766662 * r2766686;
        return r2766687;
}

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.1

    \[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.1

    \[\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 2019151 +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))))))))))