Average Error: 17.0 → 3.9
Time: 15.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^{\mathsf{log1p}\left(\mathsf{expm1}\left(\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)\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^{\mathsf{log1p}\left(\mathsf{expm1}\left(\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)\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25480 = phi1;
        double r25481 = sin(r25480);
        double r25482 = phi2;
        double r25483 = sin(r25482);
        double r25484 = r25481 * r25483;
        double r25485 = cos(r25480);
        double r25486 = cos(r25482);
        double r25487 = r25485 * r25486;
        double r25488 = lambda1;
        double r25489 = lambda2;
        double r25490 = r25488 - r25489;
        double r25491 = cos(r25490);
        double r25492 = r25487 * r25491;
        double r25493 = r25484 + r25492;
        double r25494 = acos(r25493);
        double r25495 = R;
        double r25496 = r25494 * r25495;
        return r25496;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25497 = phi1;
        double r25498 = sin(r25497);
        double r25499 = phi2;
        double r25500 = sin(r25499);
        double r25501 = r25498 * r25500;
        double r25502 = cos(r25497);
        double r25503 = cos(r25499);
        double r25504 = r25502 * r25503;
        double r25505 = lambda1;
        double r25506 = cos(r25505);
        double r25507 = lambda2;
        double r25508 = cos(r25507);
        double r25509 = r25506 * r25508;
        double r25510 = sin(r25505);
        double r25511 = -r25507;
        double r25512 = sin(r25511);
        double r25513 = r25510 * r25512;
        double r25514 = r25509 - r25513;
        double r25515 = r25504 * r25514;
        double r25516 = r25501 + r25515;
        double r25517 = acos(r25516);
        double r25518 = exp(r25517);
        double r25519 = log(r25518);
        double r25520 = log(r25519);
        double r25521 = expm1(r25520);
        double r25522 = log1p(r25521);
        double r25523 = exp(r25522);
        double r25524 = R;
        double r25525 = r25523 * r25524;
        return r25525;
}

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

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

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

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

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

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

    \[\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. Using strategy rm
  11. Applied log1p-expm1-u3.9

    \[\leadsto e^{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\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)\right)\right)}} \cdot R\]
  12. Final simplification3.9

    \[\leadsto e^{\mathsf{log1p}\left(\mathsf{expm1}\left(\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)\right)\right)} \cdot R\]

Reproduce

herbie shell --seed 2020035 +o rules:numerics
(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))