\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^{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\log \left(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)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25480 = phi1;
double r25481 = sin(r25480);
double r25482 = phi2;
double r25483 = sin(r25482);
double r25484 = r25481 * r25483;
double r25485 = cos(r25480);
double r25486 = cos(r25482);
double r25487 = r25485 * r25486;
double r25488 = lambda1;
double r25489 = lambda2;
double r25490 = r25488 - r25489;
double r25491 = cos(r25490);
double r25492 = r25487 * r25491;
double r25493 = r25484 + r25492;
double r25494 = acos(r25493);
double r25495 = R;
double r25496 = r25494 * r25495;
return r25496;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25497 = phi1;
double r25498 = sin(r25497);
double r25499 = phi2;
double r25500 = sin(r25499);
double r25501 = r25498 * r25500;
double r25502 = cos(r25497);
double r25503 = cos(r25499);
double r25504 = r25502 * r25503;
double r25505 = lambda1;
double r25506 = cos(r25505);
double r25507 = lambda2;
double r25508 = cos(r25507);
double r25509 = r25506 * r25508;
double r25510 = sin(r25505);
double r25511 = -r25507;
double r25512 = sin(r25511);
double r25513 = r25510 * r25512;
double r25514 = r25509 - r25513;
double r25515 = r25504 * r25514;
double r25516 = r25501 + r25515;
double r25517 = acos(r25516);
double r25518 = exp(r25517);
double r25519 = log(r25518);
double r25520 = log(r25519);
double r25521 = expm1(r25520);
double r25522 = log1p(r25521);
double r25523 = exp(r25522);
double r25524 = R;
double r25525 = r25523 * r25524;
return r25525;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.0
rmApplied sub-neg17.0
Applied cos-sum3.8
Simplified3.8
rmApplied add-exp-log3.8
rmApplied add-log-exp3.8
rmApplied log1p-expm1-u3.9
Final simplification3.9
herbie shell --seed 2020035 +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))