\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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26645 = phi1;
double r26646 = sin(r26645);
double r26647 = phi2;
double r26648 = sin(r26647);
double r26649 = r26646 * r26648;
double r26650 = cos(r26645);
double r26651 = cos(r26647);
double r26652 = r26650 * r26651;
double r26653 = lambda1;
double r26654 = lambda2;
double r26655 = r26653 - r26654;
double r26656 = cos(r26655);
double r26657 = r26652 * r26656;
double r26658 = r26649 + r26657;
double r26659 = acos(r26658);
double r26660 = R;
double r26661 = r26659 * r26660;
return r26661;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26662 = phi1;
double r26663 = sin(r26662);
double r26664 = phi2;
double r26665 = sin(r26664);
double r26666 = r26663 * r26665;
double r26667 = cos(r26662);
double r26668 = cos(r26664);
double r26669 = r26667 * r26668;
double r26670 = lambda1;
double r26671 = cos(r26670);
double r26672 = lambda2;
double r26673 = cos(r26672);
double r26674 = r26671 * r26673;
double r26675 = r26669 * r26674;
double r26676 = sin(r26670);
double r26677 = sin(r26672);
double r26678 = r26676 * r26677;
double r26679 = cbrt(r26678);
double r26680 = r26679 * r26679;
double r26681 = r26680 * r26679;
double r26682 = r26669 * r26681;
double r26683 = r26675 + r26682;
double r26684 = r26666 + r26683;
double r26685 = acos(r26684);
double r26686 = R;
double r26687 = r26685 * r26686;
return r26687;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.6
rmApplied cos-diff3.7
Applied distribute-lft-in3.7
rmApplied add-cube-cbrt3.7
Final simplification3.7
herbie shell --seed 2020049 +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))