\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\tan^{-1}_* \frac{\sin theta \cdot \left(\sin delta \cdot \cos \phi_1\right)}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos delta - \sin \phi_1 \cdot \mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\sin delta \cdot \cos \phi_1\right) \cdot \cos theta\right)\right)\right)} + \lambda_1double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r856507 = lambda1;
double r856508 = theta;
double r856509 = sin(r856508);
double r856510 = delta;
double r856511 = sin(r856510);
double r856512 = r856509 * r856511;
double r856513 = phi1;
double r856514 = cos(r856513);
double r856515 = r856512 * r856514;
double r856516 = cos(r856510);
double r856517 = sin(r856513);
double r856518 = r856517 * r856516;
double r856519 = r856514 * r856511;
double r856520 = cos(r856508);
double r856521 = r856519 * r856520;
double r856522 = r856518 + r856521;
double r856523 = asin(r856522);
double r856524 = sin(r856523);
double r856525 = r856517 * r856524;
double r856526 = r856516 - r856525;
double r856527 = atan2(r856515, r856526);
double r856528 = r856507 + r856527;
return r856528;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r856529 = theta;
double r856530 = sin(r856529);
double r856531 = delta;
double r856532 = sin(r856531);
double r856533 = phi1;
double r856534 = cos(r856533);
double r856535 = r856532 * r856534;
double r856536 = r856530 * r856535;
double r856537 = cos(r856531);
double r856538 = sin(r856533);
double r856539 = cos(r856529);
double r856540 = r856535 * r856539;
double r856541 = fma(r856538, r856537, r856540);
double r856542 = r856538 * r856541;
double r856543 = r856537 - r856542;
double r856544 = log1p(r856543);
double r856545 = expm1(r856544);
double r856546 = atan2(r856536, r856545);
double r856547 = lambda1;
double r856548 = r856546 + r856547;
return r856548;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
Simplified0.2
rmApplied associate-*r*0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019154 +o rules:numerics
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))