\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 Re^{\log \left(\log \left(1 \cdot e^{\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 - \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 r106 = phi1;
double r107 = sin(r106);
double r108 = phi2;
double r109 = sin(r108);
double r110 = r107 * r109;
double r111 = cos(r106);
double r112 = cos(r108);
double r113 = r111 * r112;
double r114 = lambda1;
double r115 = lambda2;
double r116 = r114 - r115;
double r117 = cos(r116);
double r118 = r113 * r117;
double r119 = r110 + r118;
double r120 = acos(r119);
double r121 = R;
double r122 = r120 * r121;
return r122;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r123 = 1.0;
double r124 = phi1;
double r125 = sin(r124);
double r126 = phi2;
double r127 = sin(r126);
double r128 = r125 * r127;
double r129 = cos(r124);
double r130 = cos(r126);
double r131 = r129 * r130;
double r132 = lambda1;
double r133 = cos(r132);
double r134 = lambda2;
double r135 = cos(r134);
double r136 = r133 * r135;
double r137 = sin(r132);
double r138 = -r134;
double r139 = sin(r138);
double r140 = r137 * r139;
double r141 = r136 - r140;
double r142 = r131 * r141;
double r143 = r128 + r142;
double r144 = acos(r143);
double r145 = exp(r144);
double r146 = r123 * r145;
double r147 = log(r146);
double r148 = log(r147);
double r149 = exp(r148);
double r150 = R;
double r151 = r149 * r150;
return r151;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.8
rmApplied sub-neg16.8
Applied cos-sum3.5
Simplified3.5
rmApplied add-exp-log3.5
rmApplied add-log-exp3.5
rmApplied *-un-lft-identity3.5
Final simplification3.5
herbie shell --seed 2020025 +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))