Average Error: 13.2 → 0.2
Time: 38.4s
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{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)} \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)} + \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2\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{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)} \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)} + \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2\right)}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r1789163 = lambda1;
        double r1789164 = lambda2;
        double r1789165 = r1789163 - r1789164;
        double r1789166 = sin(r1789165);
        double r1789167 = phi2;
        double r1789168 = cos(r1789167);
        double r1789169 = r1789166 * r1789168;
        double r1789170 = phi1;
        double r1789171 = cos(r1789170);
        double r1789172 = sin(r1789167);
        double r1789173 = r1789171 * r1789172;
        double r1789174 = sin(r1789170);
        double r1789175 = r1789174 * r1789168;
        double r1789176 = cos(r1789165);
        double r1789177 = r1789175 * r1789176;
        double r1789178 = r1789173 - r1789177;
        double r1789179 = atan2(r1789169, r1789178);
        return r1789179;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r1789180 = lambda2;
        double r1789181 = cos(r1789180);
        double r1789182 = lambda1;
        double r1789183 = sin(r1789182);
        double r1789184 = r1789181 * r1789183;
        double r1789185 = cos(r1789182);
        double r1789186 = sin(r1789180);
        double r1789187 = r1789185 * r1789186;
        double r1789188 = r1789184 - r1789187;
        double r1789189 = phi2;
        double r1789190 = cos(r1789189);
        double r1789191 = r1789188 * r1789190;
        double r1789192 = sin(r1789189);
        double r1789193 = phi1;
        double r1789194 = cos(r1789193);
        double r1789195 = r1789192 * r1789194;
        double r1789196 = r1789186 * r1789183;
        double r1789197 = sin(r1789193);
        double r1789198 = r1789190 * r1789197;
        double r1789199 = r1789196 * r1789198;
        double r1789200 = cbrt(r1789199);
        double r1789201 = r1789200 * r1789200;
        double r1789202 = r1789201 * r1789200;
        double r1789203 = r1789181 * r1789185;
        double r1789204 = r1789203 * r1789197;
        double r1789205 = r1789204 * r1789190;
        double r1789206 = r1789202 + r1789205;
        double r1789207 = r1789195 - r1789206;
        double r1789208 = atan2(r1789191, r1789207);
        return r1789208;
}

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.2

    \[\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-diff6.6

    \[\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 associate-*r*0.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(\color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2} + \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 add-cube-cbrt0.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(\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \sin \phi_1\right) \cdot \cos \phi_2 + \color{blue}{\left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}}\right)}\]
  11. Final simplification0.2

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

Reproduce

herbie shell --seed 2019154 +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))))))