\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r46417 = lambda1;
double r46418 = phi2;
double r46419 = cos(r46418);
double r46420 = lambda2;
double r46421 = r46417 - r46420;
double r46422 = sin(r46421);
double r46423 = r46419 * r46422;
double r46424 = phi1;
double r46425 = cos(r46424);
double r46426 = cos(r46421);
double r46427 = r46419 * r46426;
double r46428 = r46425 + r46427;
double r46429 = atan2(r46423, r46428);
double r46430 = r46417 + r46429;
return r46430;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r46431 = lambda1;
double r46432 = sin(r46431);
double r46433 = lambda2;
double r46434 = cos(r46433);
double r46435 = r46432 * r46434;
double r46436 = phi2;
double r46437 = cos(r46436);
double r46438 = r46435 * r46437;
double r46439 = cos(r46431);
double r46440 = -r46433;
double r46441 = sin(r46440);
double r46442 = r46439 * r46441;
double r46443 = r46442 * r46437;
double r46444 = r46438 + r46443;
double r46445 = sin(r46433);
double r46446 = r46439 * r46434;
double r46447 = fma(r46432, r46445, r46446);
double r46448 = r46437 * r46447;
double r46449 = phi1;
double r46450 = cos(r46449);
double r46451 = r46448 + r46450;
double r46452 = atan2(r46444, r46451);
double r46453 = r46431 + r46452;
return r46453;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Applied distribute-lft-in0.8
Simplified0.8
Simplified0.8
rmApplied sub-neg0.8
Applied cos-sum0.2
Simplified0.2
rmApplied fma-udef0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019326 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))