\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{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \frac{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left({\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3} - {\left(\cos \phi_1\right)}^{3}\right)}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \cos \phi_1\right)}} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r41352 = lambda1;
double r41353 = phi2;
double r41354 = cos(r41353);
double r41355 = lambda2;
double r41356 = r41352 - r41355;
double r41357 = sin(r41356);
double r41358 = r41354 * r41357;
double r41359 = phi1;
double r41360 = cos(r41359);
double r41361 = cos(r41356);
double r41362 = r41354 * r41361;
double r41363 = r41360 + r41362;
double r41364 = atan2(r41358, r41363);
double r41365 = r41352 + r41364;
return r41365;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r41366 = lambda1;
double r41367 = phi2;
double r41368 = cos(r41367);
double r41369 = sin(r41366);
double r41370 = lambda2;
double r41371 = cos(r41370);
double r41372 = r41369 * r41371;
double r41373 = cos(r41366);
double r41374 = sin(r41370);
double r41375 = r41373 * r41374;
double r41376 = r41372 - r41375;
double r41377 = r41368 * r41376;
double r41378 = phi1;
double r41379 = cos(r41378);
double r41380 = 3.0;
double r41381 = pow(r41379, r41380);
double r41382 = r41373 * r41371;
double r41383 = r41368 * r41382;
double r41384 = pow(r41383, r41380);
double r41385 = r41381 + r41384;
double r41386 = r41379 * r41379;
double r41387 = r41384 - r41381;
double r41388 = r41383 * r41387;
double r41389 = r41383 * r41383;
double r41390 = r41383 * r41379;
double r41391 = r41386 + r41390;
double r41392 = r41389 + r41391;
double r41393 = r41388 / r41392;
double r41394 = r41386 + r41393;
double r41395 = r41385 / r41394;
double r41396 = r41369 * r41374;
double r41397 = r41396 * r41368;
double r41398 = r41395 + r41397;
double r41399 = atan2(r41377, r41398);
double r41400 = r41366 + r41399;
return r41400;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied cos-diff0.9
Applied distribute-rgt-in0.9
Applied associate-+r+0.9
Simplified0.9
rmApplied sin-diff0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip3--0.3
Applied associate-*r/0.3
Final simplification0.3
herbie shell --seed 2019306
(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)))))))