\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)}\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\sqrt[3]{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)\right) \cdot \log \left(e^{\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)}\right)} + \cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2167656 = lambda1;
double r2167657 = phi2;
double r2167658 = cos(r2167657);
double r2167659 = lambda2;
double r2167660 = r2167656 - r2167659;
double r2167661 = sin(r2167660);
double r2167662 = r2167658 * r2167661;
double r2167663 = phi1;
double r2167664 = cos(r2167663);
double r2167665 = cos(r2167660);
double r2167666 = r2167658 * r2167665;
double r2167667 = r2167664 + r2167666;
double r2167668 = atan2(r2167662, r2167667);
double r2167669 = r2167656 + r2167668;
return r2167669;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2167670 = phi2;
double r2167671 = cos(r2167670);
double r2167672 = lambda1;
double r2167673 = sin(r2167672);
double r2167674 = lambda2;
double r2167675 = cos(r2167674);
double r2167676 = r2167673 * r2167675;
double r2167677 = cos(r2167672);
double r2167678 = sin(r2167674);
double r2167679 = r2167677 * r2167678;
double r2167680 = r2167676 - r2167679;
double r2167681 = r2167671 * r2167680;
double r2167682 = r2167671 * r2167675;
double r2167683 = phi1;
double r2167684 = cos(r2167683);
double r2167685 = fma(r2167682, r2167677, r2167684);
double r2167686 = r2167685 * r2167685;
double r2167687 = exp(r2167685);
double r2167688 = log(r2167687);
double r2167689 = r2167686 * r2167688;
double r2167690 = cbrt(r2167689);
double r2167691 = r2167678 * r2167673;
double r2167692 = r2167671 * r2167691;
double r2167693 = r2167690 + r2167692;
double r2167694 = atan2(r2167681, r2167693);
double r2167695 = r2167694 + r2167672;
return r2167695;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
rmApplied sin-diff0.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied add-cbrt-cube0.3
rmApplied add-log-exp0.3
Final simplification0.3
herbie shell --seed 2019168 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))