Average Error: 13.7 → 0.2
Time: 40.0s
Precision: 64
\[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
\[\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \sin \lambda_1 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}\]
\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \sin \lambda_1 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r5131198 = lambda1;
        double r5131199 = lambda2;
        double r5131200 = r5131198 - r5131199;
        double r5131201 = sin(r5131200);
        double r5131202 = phi2;
        double r5131203 = cos(r5131202);
        double r5131204 = r5131201 * r5131203;
        double r5131205 = phi1;
        double r5131206 = cos(r5131205);
        double r5131207 = sin(r5131202);
        double r5131208 = r5131206 * r5131207;
        double r5131209 = sin(r5131205);
        double r5131210 = r5131209 * r5131203;
        double r5131211 = cos(r5131200);
        double r5131212 = r5131210 * r5131211;
        double r5131213 = r5131208 - r5131212;
        double r5131214 = atan2(r5131204, r5131213);
        return r5131214;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r5131215 = phi2;
        double r5131216 = cos(r5131215);
        double r5131217 = lambda2;
        double r5131218 = cos(r5131217);
        double r5131219 = lambda1;
        double r5131220 = sin(r5131219);
        double r5131221 = r5131218 * r5131220;
        double r5131222 = cos(r5131219);
        double r5131223 = sin(r5131217);
        double r5131224 = r5131222 * r5131223;
        double r5131225 = log1p(r5131224);
        double r5131226 = expm1(r5131225);
        double r5131227 = r5131221 - r5131226;
        double r5131228 = r5131216 * r5131227;
        double r5131229 = phi1;
        double r5131230 = cos(r5131229);
        double r5131231 = sin(r5131215);
        double r5131232 = r5131230 * r5131231;
        double r5131233 = sin(r5131229);
        double r5131234 = r5131216 * r5131233;
        double r5131235 = r5131218 * r5131222;
        double r5131236 = r5131234 * r5131235;
        double r5131237 = r5131223 * r5131220;
        double r5131238 = expm1(r5131237);
        double r5131239 = log1p(r5131238);
        double r5131240 = r5131239 * r5131234;
        double r5131241 = r5131236 + r5131240;
        double r5131242 = r5131232 - r5131241;
        double r5131243 = atan2(r5131228, r5131242);
        return r5131243;
}

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 13.7

    \[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  2. Using strategy rm
  3. Applied sin-diff7.1

    \[\leadsto \tan^{-1}_* \frac{\color{blue}{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)} \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  4. Using strategy rm
  5. Applied cos-diff0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}}\]
  6. Applied distribute-rgt-in0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}}\]
  7. Using strategy rm
  8. Applied expm1-log1p-u0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)}\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}\]
  9. Using strategy rm
  10. Applied log1p-expm1-u0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \lambda_2\right)\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)} \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}\]
  11. Final simplification0.2

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

Reproduce

herbie shell --seed 2019165 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Bearing on a great circle"
  (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))