\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 \cos^{-1} \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \sin \phi_2 \cdot \sin \phi_1\right)\right)\right)\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r960158 = phi1;
double r960159 = sin(r960158);
double r960160 = phi2;
double r960161 = sin(r960160);
double r960162 = r960159 * r960161;
double r960163 = cos(r960158);
double r960164 = cos(r960160);
double r960165 = r960163 * r960164;
double r960166 = lambda1;
double r960167 = lambda2;
double r960168 = r960166 - r960167;
double r960169 = cos(r960168);
double r960170 = r960165 * r960169;
double r960171 = r960162 + r960170;
double r960172 = acos(r960171);
double r960173 = R;
double r960174 = r960172 * r960173;
return r960174;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r960175 = R;
double r960176 = phi2;
double r960177 = cos(r960176);
double r960178 = phi1;
double r960179 = cos(r960178);
double r960180 = r960177 * r960179;
double r960181 = lambda2;
double r960182 = sin(r960181);
double r960183 = lambda1;
double r960184 = sin(r960183);
double r960185 = cos(r960183);
double r960186 = cos(r960181);
double r960187 = r960185 * r960186;
double r960188 = fma(r960182, r960184, r960187);
double r960189 = sin(r960176);
double r960190 = sin(r960178);
double r960191 = r960189 * r960190;
double r960192 = fma(r960180, r960188, r960191);
double r960193 = log1p(r960192);
double r960194 = expm1(r960193);
double r960195 = acos(r960194);
double r960196 = r960175 * r960195;
return r960196;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 17.0
Simplified17.0
rmApplied cos-diff3.9
rmApplied expm1-log1p-u4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2019138 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))