R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\phi_2 \cdot \frac{1}{2}\right) \cdot \cos \left(\phi_1 \cdot \frac{1}{2}\right) - \sin \left(\phi_1 \cdot \frac{1}{2}\right) \cdot \sin \left(\phi_2 \cdot \frac{1}{2}\right)\right)\right)^2 + \left(\phi_1 - \phi_2\right)^2}^*double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r11763641 = R;
double r11763642 = lambda1;
double r11763643 = lambda2;
double r11763644 = r11763642 - r11763643;
double r11763645 = phi1;
double r11763646 = phi2;
double r11763647 = r11763645 + r11763646;
double r11763648 = 2.0;
double r11763649 = r11763647 / r11763648;
double r11763650 = cos(r11763649);
double r11763651 = r11763644 * r11763650;
double r11763652 = r11763651 * r11763651;
double r11763653 = r11763645 - r11763646;
double r11763654 = r11763653 * r11763653;
double r11763655 = r11763652 + r11763654;
double r11763656 = sqrt(r11763655);
double r11763657 = r11763641 * r11763656;
return r11763657;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r11763658 = R;
double r11763659 = lambda1;
double r11763660 = lambda2;
double r11763661 = r11763659 - r11763660;
double r11763662 = phi2;
double r11763663 = 0.5;
double r11763664 = r11763662 * r11763663;
double r11763665 = cos(r11763664);
double r11763666 = phi1;
double r11763667 = r11763666 * r11763663;
double r11763668 = cos(r11763667);
double r11763669 = r11763665 * r11763668;
double r11763670 = sin(r11763667);
double r11763671 = sin(r11763664);
double r11763672 = r11763670 * r11763671;
double r11763673 = r11763669 - r11763672;
double r11763674 = r11763661 * r11763673;
double r11763675 = r11763666 - r11763662;
double r11763676 = hypot(r11763674, r11763675);
double r11763677 = r11763658 * r11763676;
return r11763677;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 36.9
Simplified3.8
Taylor expanded around inf 3.8
rmApplied distribute-rgt-in3.8
Applied cos-sum0.1
Final simplification0.1
herbie shell --seed 2019112 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))