Average Error: 0 → 0
Time: 6.6m
Precision: 64
\[\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 \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1\]
\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 \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r598170 = lambda1;
        double r598171 = phi2;
        double r598172 = cos(r598171);
        double r598173 = lambda2;
        double r598174 = r598170 - r598173;
        double r598175 = sin(r598174);
        double r598176 = r598172 * r598175;
        double r598177 = phi1;
        double r598178 = cos(r598177);
        double r598179 = cos(r598174);
        double r598180 = r598172 * r598179;
        double r598181 = r598178 + r598180;
        double r598182 = atan2(r598176, r598181);
        double r598183 = r598170 + r598182;
        return r598183;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r598184 = phi2;
        double r598185 = cos(r598184);
        double r598186 = lambda1;
        double r598187 = lambda2;
        double r598188 = r598186 - r598187;
        double r598189 = sin(r598188);
        double r598190 = r598185 * r598189;
        double r598191 = cos(r598188);
        double r598192 = r598185 * r598191;
        double r598193 = phi1;
        double r598194 = cos(r598193);
        double r598195 = r598192 + r598194;
        double r598196 = atan2(r598190, r598195);
        double r598197 = r598196 + r598186;
        return r598197;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0

    \[\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)}\]
  2. Final simplification0

    \[\leadsto \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1\]

Reproduce

herbie shell --seed 2019129 
(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)))))))