Average Error: 16.9 → 3.7
Time: 42.0s
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\]
\[\log \left(e^{\cos^{-1} \left(\cos \phi_2 \cdot \left(\cos \phi_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right) \cdot R\]
\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
\log \left(e^{\cos^{-1} \left(\cos \phi_2 \cdot \left(\cos \phi_1 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r869228 = phi1;
        double r869229 = sin(r869228);
        double r869230 = phi2;
        double r869231 = sin(r869230);
        double r869232 = r869229 * r869231;
        double r869233 = cos(r869228);
        double r869234 = cos(r869230);
        double r869235 = r869233 * r869234;
        double r869236 = lambda1;
        double r869237 = lambda2;
        double r869238 = r869236 - r869237;
        double r869239 = cos(r869238);
        double r869240 = r869235 * r869239;
        double r869241 = r869232 + r869240;
        double r869242 = acos(r869241);
        double r869243 = R;
        double r869244 = r869242 * r869243;
        return r869244;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r869245 = phi2;
        double r869246 = cos(r869245);
        double r869247 = phi1;
        double r869248 = cos(r869247);
        double r869249 = lambda1;
        double r869250 = sin(r869249);
        double r869251 = lambda2;
        double r869252 = sin(r869251);
        double r869253 = r869250 * r869252;
        double r869254 = cos(r869249);
        double r869255 = cos(r869251);
        double r869256 = r869254 * r869255;
        double r869257 = r869253 + r869256;
        double r869258 = r869248 * r869257;
        double r869259 = r869246 * r869258;
        double r869260 = sin(r869245);
        double r869261 = sin(r869247);
        double r869262 = r869260 * r869261;
        double r869263 = r869259 + r869262;
        double r869264 = acos(r869263);
        double r869265 = exp(r869264);
        double r869266 = log(r869265);
        double r869267 = R;
        double r869268 = r869266 * r869267;
        return r869268;
}

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

    \[\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 add-log-exp3.7

    \[\leadsto \cos^{-1} \left(\color{blue}{\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right)} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied add-log-exp3.7

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

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

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

Reproduce

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