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(\tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\left({\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{\frac{1}{3}} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2946527 = R;
double r2946528 = 2.0;
double r2946529 = phi1;
double r2946530 = phi2;
double r2946531 = r2946529 - r2946530;
double r2946532 = r2946531 / r2946528;
double r2946533 = sin(r2946532);
double r2946534 = pow(r2946533, r2946528);
double r2946535 = cos(r2946529);
double r2946536 = cos(r2946530);
double r2946537 = r2946535 * r2946536;
double r2946538 = lambda1;
double r2946539 = lambda2;
double r2946540 = r2946538 - r2946539;
double r2946541 = r2946540 / r2946528;
double r2946542 = sin(r2946541);
double r2946543 = r2946537 * r2946542;
double r2946544 = r2946543 * r2946542;
double r2946545 = r2946534 + r2946544;
double r2946546 = sqrt(r2946545);
double r2946547 = 1.0;
double r2946548 = r2946547 - r2946545;
double r2946549 = sqrt(r2946548);
double r2946550 = atan2(r2946546, r2946549);
double r2946551 = r2946528 * r2946550;
double r2946552 = r2946527 * r2946551;
return r2946552;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2946553 = phi1;
double r2946554 = phi2;
double r2946555 = r2946553 - r2946554;
double r2946556 = 2.0;
double r2946557 = r2946555 / r2946556;
double r2946558 = sin(r2946557);
double r2946559 = r2946558 * r2946558;
double r2946560 = lambda1;
double r2946561 = lambda2;
double r2946562 = r2946560 - r2946561;
double r2946563 = r2946562 / r2946556;
double r2946564 = sin(r2946563);
double r2946565 = cos(r2946553);
double r2946566 = r2946564 * r2946565;
double r2946567 = cos(r2946554);
double r2946568 = r2946567 * r2946564;
double r2946569 = r2946566 * r2946568;
double r2946570 = r2946559 + r2946569;
double r2946571 = sqrt(r2946570);
double r2946572 = cos(r2946557);
double r2946573 = r2946572 * r2946572;
double r2946574 = r2946564 * r2946564;
double r2946575 = 0.3333333333333333;
double r2946576 = pow(r2946574, r2946575);
double r2946577 = cbrt(r2946564);
double r2946578 = r2946576 * r2946577;
double r2946579 = r2946578 * r2946565;
double r2946580 = r2946579 * r2946568;
double r2946581 = r2946573 - r2946580;
double r2946582 = sqrt(r2946581);
double r2946583 = atan2(r2946571, r2946582);
double r2946584 = r2946583 * r2946556;
double r2946585 = R;
double r2946586 = r2946584 * r2946585;
return r2946586;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
Simplified24.0
rmApplied add-cbrt-cube24.0
rmApplied cbrt-prod24.0
rmApplied pow1/324.0
Final simplification24.0
herbie shell --seed 2019151
(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))))))))))