\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)}{\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \frac{\left(\cos \phi_1 \cdot \cos \phi_1\right) \cdot \cos \phi_1 + \left(\left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right)\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right)}{\cos \phi_1 \cdot \cos \phi_1 + \frac{\left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right) \cdot \left(\left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1\right) - \cos \phi_1 \cdot \cos \phi_1\right)}{\cos \phi_1 + \left(\cos \phi_2 \cdot \cos \lambda_2\right) \cdot \cos \lambda_1}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1979485 = lambda1;
double r1979486 = phi2;
double r1979487 = cos(r1979486);
double r1979488 = lambda2;
double r1979489 = r1979485 - r1979488;
double r1979490 = sin(r1979489);
double r1979491 = r1979487 * r1979490;
double r1979492 = phi1;
double r1979493 = cos(r1979492);
double r1979494 = cos(r1979489);
double r1979495 = r1979487 * r1979494;
double r1979496 = r1979493 + r1979495;
double r1979497 = atan2(r1979491, r1979496);
double r1979498 = r1979485 + r1979497;
return r1979498;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1979499 = lambda1;
double r1979500 = phi2;
double r1979501 = cos(r1979500);
double r1979502 = sin(r1979499);
double r1979503 = lambda2;
double r1979504 = cos(r1979503);
double r1979505 = r1979502 * r1979504;
double r1979506 = cos(r1979499);
double r1979507 = sin(r1979503);
double r1979508 = r1979506 * r1979507;
double r1979509 = r1979505 - r1979508;
double r1979510 = r1979501 * r1979509;
double r1979511 = r1979507 * r1979502;
double r1979512 = r1979501 * r1979511;
double r1979513 = phi1;
double r1979514 = cos(r1979513);
double r1979515 = r1979514 * r1979514;
double r1979516 = r1979515 * r1979514;
double r1979517 = r1979501 * r1979504;
double r1979518 = r1979517 * r1979506;
double r1979519 = r1979518 * r1979518;
double r1979520 = r1979519 * r1979518;
double r1979521 = r1979516 + r1979520;
double r1979522 = r1979519 - r1979515;
double r1979523 = r1979518 * r1979522;
double r1979524 = r1979514 + r1979518;
double r1979525 = r1979523 / r1979524;
double r1979526 = r1979515 + r1979525;
double r1979527 = r1979521 / r1979526;
double r1979528 = r1979512 + r1979527;
double r1979529 = atan2(r1979510, r1979528);
double r1979530 = r1979499 + r1979529;
return r1979530;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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