\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\log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right)\right)\right)}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26058 = phi1;
double r26059 = sin(r26058);
double r26060 = phi2;
double r26061 = sin(r26060);
double r26062 = r26059 * r26061;
double r26063 = cos(r26058);
double r26064 = cos(r26060);
double r26065 = r26063 * r26064;
double r26066 = lambda1;
double r26067 = lambda2;
double r26068 = r26066 - r26067;
double r26069 = cos(r26068);
double r26070 = r26065 * r26069;
double r26071 = r26062 + r26070;
double r26072 = acos(r26071);
double r26073 = R;
double r26074 = r26072 * r26073;
return r26074;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26075 = phi1;
double r26076 = sin(r26075);
double r26077 = phi2;
double r26078 = sin(r26077);
double r26079 = cos(r26075);
double r26080 = cos(r26077);
double r26081 = r26079 * r26080;
double r26082 = lambda1;
double r26083 = cos(r26082);
double r26084 = lambda2;
double r26085 = cos(r26084);
double r26086 = sin(r26084);
double r26087 = sin(r26082);
double r26088 = r26086 * r26087;
double r26089 = fma(r26083, r26085, r26088);
double r26090 = r26081 * r26089;
double r26091 = exp(r26090);
double r26092 = log(r26091);
double r26093 = fma(r26076, r26078, r26092);
double r26094 = acos(r26093);
double r26095 = exp(r26094);
double r26096 = log(r26095);
double r26097 = R;
double r26098 = r26096 * r26097;
return r26098;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.3
Simplified16.3
rmApplied sub-neg16.3
Applied cos-sum3.7
Simplified3.7
rmApplied add-cbrt-cube3.7
Applied add-cbrt-cube3.7
Applied cbrt-unprod3.7
Simplified3.7
rmApplied add-log-exp3.7
Simplified3.7
rmApplied add-log-exp3.8
Final simplification3.8
herbie shell --seed 2019325 +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))