Average Error: 16.9 → 4.0
Time: 14.5s
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\]
\[e^{\log \left(\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\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
e^{\log \left(\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25472 = phi1;
        double r25473 = sin(r25472);
        double r25474 = phi2;
        double r25475 = sin(r25474);
        double r25476 = r25473 * r25475;
        double r25477 = cos(r25472);
        double r25478 = cos(r25474);
        double r25479 = r25477 * r25478;
        double r25480 = lambda1;
        double r25481 = lambda2;
        double r25482 = r25480 - r25481;
        double r25483 = cos(r25482);
        double r25484 = r25479 * r25483;
        double r25485 = r25476 + r25484;
        double r25486 = acos(r25485);
        double r25487 = R;
        double r25488 = r25486 * r25487;
        return r25488;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25489 = phi1;
        double r25490 = sin(r25489);
        double r25491 = phi2;
        double r25492 = sin(r25491);
        double r25493 = r25490 * r25492;
        double r25494 = cos(r25489);
        double r25495 = cos(r25491);
        double r25496 = r25494 * r25495;
        double r25497 = lambda1;
        double r25498 = cos(r25497);
        double r25499 = lambda2;
        double r25500 = cos(r25499);
        double r25501 = r25498 * r25500;
        double r25502 = sin(r25497);
        double r25503 = -r25499;
        double r25504 = sin(r25503);
        double r25505 = r25502 * r25504;
        double r25506 = r25501 - r25505;
        double r25507 = r25496 * r25506;
        double r25508 = r25493 + r25507;
        double r25509 = acos(r25508);
        double r25510 = exp(r25509);
        double r25511 = log(r25510);
        double r25512 = log(r25511);
        double r25513 = exp(r25512);
        double r25514 = R;
        double r25515 = r25513 * r25514;
        return r25515;
}

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

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R\]
  4. Applied cos-sum3.9

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right) \cdot R\]
  5. Simplified3.9

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

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

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

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

Reproduce

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