\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 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26106 = phi1;
double r26107 = sin(r26106);
double r26108 = phi2;
double r26109 = sin(r26108);
double r26110 = r26107 * r26109;
double r26111 = cos(r26106);
double r26112 = cos(r26108);
double r26113 = r26111 * r26112;
double r26114 = lambda1;
double r26115 = lambda2;
double r26116 = r26114 - r26115;
double r26117 = cos(r26116);
double r26118 = r26113 * r26117;
double r26119 = r26110 + r26118;
double r26120 = acos(r26119);
double r26121 = R;
double r26122 = r26120 * r26121;
return r26122;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26123 = phi1;
double r26124 = sin(r26123);
double r26125 = phi2;
double r26126 = sin(r26125);
double r26127 = r26124 * r26126;
double r26128 = cos(r26123);
double r26129 = cos(r26125);
double r26130 = r26128 * r26129;
double r26131 = lambda1;
double r26132 = cos(r26131);
double r26133 = lambda2;
double r26134 = cos(r26133);
double r26135 = r26132 * r26134;
double r26136 = sin(r26131);
double r26137 = -r26133;
double r26138 = sin(r26137);
double r26139 = r26136 * r26138;
double r26140 = expm1(r26139);
double r26141 = log1p(r26140);
double r26142 = r26135 - r26141;
double r26143 = r26130 * r26142;
double r26144 = r26127 + r26143;
double r26145 = acos(r26144);
double r26146 = R;
double r26147 = r26145 * r26146;
return r26147;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.5
rmApplied sub-neg16.5
Applied cos-sum3.9
Simplified3.9
rmApplied log1p-expm1-u3.9
Final simplification3.9
herbie shell --seed 2020059 +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))