Average Error: 16.8 → 3.7
Time: 48.9s
Precision: 64
\[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
\[R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}\right)\]
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
R \cdot \cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1131160 = phi1;
        double r1131161 = sin(r1131160);
        double r1131162 = phi2;
        double r1131163 = sin(r1131162);
        double r1131164 = r1131161 * r1131163;
        double r1131165 = cos(r1131160);
        double r1131166 = cos(r1131162);
        double r1131167 = r1131165 * r1131166;
        double r1131168 = lambda1;
        double r1131169 = lambda2;
        double r1131170 = r1131168 - r1131169;
        double r1131171 = cos(r1131170);
        double r1131172 = r1131167 * r1131171;
        double r1131173 = r1131164 + r1131172;
        double r1131174 = acos(r1131173);
        double r1131175 = R;
        double r1131176 = r1131174 * r1131175;
        return r1131176;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1131177 = R;
        double r1131178 = phi2;
        double r1131179 = sin(r1131178);
        double r1131180 = phi1;
        double r1131181 = sin(r1131180);
        double r1131182 = r1131179 * r1131181;
        double r1131183 = cos(r1131180);
        double r1131184 = cos(r1131178);
        double r1131185 = r1131183 * r1131184;
        double r1131186 = lambda1;
        double r1131187 = cos(r1131186);
        double r1131188 = lambda2;
        double r1131189 = cos(r1131188);
        double r1131190 = r1131187 * r1131189;
        double r1131191 = r1131190 * r1131190;
        double r1131192 = r1131190 * r1131191;
        double r1131193 = sin(r1131186);
        double r1131194 = sin(r1131188);
        double r1131195 = r1131193 * r1131194;
        double r1131196 = r1131195 * r1131195;
        double r1131197 = r1131196 * r1131195;
        double r1131198 = r1131192 + r1131197;
        double r1131199 = r1131185 * r1131198;
        double r1131200 = r1131195 * r1131190;
        double r1131201 = r1131196 - r1131200;
        double r1131202 = r1131191 + r1131201;
        double r1131203 = r1131199 / r1131202;
        double r1131204 = r1131182 + r1131203;
        double r1131205 = acos(r1131204);
        double r1131206 = r1131177 * r1131205;
        return r1131206;
}

Error

Bits error versus R

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 16.8

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
  2. Using strategy rm
  3. Applied cos-diff3.6

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \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)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied flip3-+3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}\right) \cdot R\]
  6. Applied associate-*r/3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}\right) \cdot R\]
  7. Simplified3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \frac{\color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\right) \cdot R\]
  8. Final simplification3.7

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

Reproduce

herbie shell --seed 2019141 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))