\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26621 = phi1;
double r26622 = sin(r26621);
double r26623 = phi2;
double r26624 = sin(r26623);
double r26625 = r26622 * r26624;
double r26626 = cos(r26621);
double r26627 = cos(r26623);
double r26628 = r26626 * r26627;
double r26629 = lambda1;
double r26630 = lambda2;
double r26631 = r26629 - r26630;
double r26632 = cos(r26631);
double r26633 = r26628 * r26632;
double r26634 = r26625 + r26633;
double r26635 = acos(r26634);
double r26636 = R;
double r26637 = r26635 * r26636;
return r26637;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26638 = phi1;
double r26639 = sin(r26638);
double r26640 = phi2;
double r26641 = sin(r26640);
double r26642 = r26639 * r26641;
double r26643 = cos(r26638);
double r26644 = cos(r26640);
double r26645 = r26643 * r26644;
double r26646 = lambda1;
double r26647 = cos(r26646);
double r26648 = lambda2;
double r26649 = cos(r26648);
double r26650 = r26647 * r26649;
double r26651 = sin(r26646);
double r26652 = -r26648;
double r26653 = sin(r26652);
double r26654 = r26651 * r26653;
double r26655 = r26650 - r26654;
double r26656 = r26645 * r26655;
double r26657 = r26642 + r26656;
double r26658 = acos(r26657);
double r26659 = R;
double r26660 = r26658 * r26659;
return r26660;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.2
rmApplied sub-neg17.2
Applied cos-sum4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2020001 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))