Average Error: 17.2 → 3.8
Time: 1.1m
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 \log \left(e^{\cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\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 \log \left(e^{\cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\right)\right)}\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2074265 = phi1;
        double r2074266 = sin(r2074265);
        double r2074267 = phi2;
        double r2074268 = sin(r2074267);
        double r2074269 = r2074266 * r2074268;
        double r2074270 = cos(r2074265);
        double r2074271 = cos(r2074267);
        double r2074272 = r2074270 * r2074271;
        double r2074273 = lambda1;
        double r2074274 = lambda2;
        double r2074275 = r2074273 - r2074274;
        double r2074276 = cos(r2074275);
        double r2074277 = r2074272 * r2074276;
        double r2074278 = r2074269 + r2074277;
        double r2074279 = acos(r2074278);
        double r2074280 = R;
        double r2074281 = r2074279 * r2074280;
        return r2074281;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2074282 = R;
        double r2074283 = phi1;
        double r2074284 = cos(r2074283);
        double r2074285 = phi2;
        double r2074286 = cos(r2074285);
        double r2074287 = r2074284 * r2074286;
        double r2074288 = lambda1;
        double r2074289 = cos(r2074288);
        double r2074290 = lambda2;
        double r2074291 = cos(r2074290);
        double r2074292 = r2074289 * r2074291;
        double r2074293 = sin(r2074288);
        double r2074294 = sin(r2074290);
        double r2074295 = r2074293 * r2074294;
        double r2074296 = r2074292 + r2074295;
        double r2074297 = r2074287 * r2074296;
        double r2074298 = sin(r2074285);
        double r2074299 = sin(r2074283);
        double r2074300 = r2074298 * r2074299;
        double r2074301 = exp(r2074300);
        double r2074302 = log(r2074301);
        double r2074303 = r2074297 + r2074302;
        double r2074304 = acos(r2074303);
        double r2074305 = exp(r2074304);
        double r2074306 = log(r2074305);
        double r2074307 = r2074282 * r2074306;
        return r2074307;
}

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 17.2

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

    \[\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.8

    \[\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. Final simplification3.8

    \[\leadsto R \cdot \log \left(e^{\cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\right)\right)}\right)\]

Reproduce

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