\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 RR \cdot \log \left(e^{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27141 = phi1;
double r27142 = sin(r27141);
double r27143 = phi2;
double r27144 = sin(r27143);
double r27145 = r27142 * r27144;
double r27146 = cos(r27141);
double r27147 = cos(r27143);
double r27148 = r27146 * r27147;
double r27149 = lambda1;
double r27150 = lambda2;
double r27151 = r27149 - r27150;
double r27152 = cos(r27151);
double r27153 = r27148 * r27152;
double r27154 = r27145 + r27153;
double r27155 = acos(r27154);
double r27156 = R;
double r27157 = r27155 * r27156;
return r27157;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27158 = R;
double r27159 = phi1;
double r27160 = cos(r27159);
double r27161 = phi2;
double r27162 = cos(r27161);
double r27163 = lambda1;
double r27164 = cos(r27163);
double r27165 = lambda2;
double r27166 = cos(r27165);
double r27167 = r27164 * r27166;
double r27168 = sin(r27163);
double r27169 = -1.0;
double r27170 = r27169 * r27165;
double r27171 = sin(r27170);
double r27172 = r27168 * r27171;
double r27173 = r27167 - r27172;
double r27174 = log1p(r27173);
double r27175 = expm1(r27174);
double r27176 = r27162 * r27175;
double r27177 = r27160 * r27176;
double r27178 = sin(r27159);
double r27179 = sin(r27161);
double r27180 = r27178 * r27179;
double r27181 = r27177 + r27180;
double r27182 = acos(r27181);
double r27183 = exp(r27182);
double r27184 = log(r27183);
double r27185 = r27158 * r27184;
return r27185;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.4
rmApplied sub-neg17.4
Applied cos-sum4.0
Simplified4.0
rmApplied expm1-log1p-u4.0
Taylor expanded around 0 4.0
rmApplied add-log-exp4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2020020 +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))