Average Error: 17.2 → 3.7
Time: 14.4s
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 \lambda_2\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 \lambda_2\right)\right)}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22636 = phi1;
        double r22637 = sin(r22636);
        double r22638 = phi2;
        double r22639 = sin(r22638);
        double r22640 = r22637 * r22639;
        double r22641 = cos(r22636);
        double r22642 = cos(r22638);
        double r22643 = r22641 * r22642;
        double r22644 = lambda1;
        double r22645 = lambda2;
        double r22646 = r22644 - r22645;
        double r22647 = cos(r22646);
        double r22648 = r22643 * r22647;
        double r22649 = r22640 + r22648;
        double r22650 = acos(r22649);
        double r22651 = R;
        double r22652 = r22650 * r22651;
        return r22652;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22653 = phi1;
        double r22654 = sin(r22653);
        double r22655 = phi2;
        double r22656 = sin(r22655);
        double r22657 = r22654 * r22656;
        double r22658 = cos(r22653);
        double r22659 = cos(r22655);
        double r22660 = r22658 * r22659;
        double r22661 = lambda1;
        double r22662 = cos(r22661);
        double r22663 = lambda2;
        double r22664 = cos(r22663);
        double r22665 = r22662 * r22664;
        double r22666 = sin(r22661);
        double r22667 = sin(r22663);
        double r22668 = r22666 * r22667;
        double r22669 = r22665 + r22668;
        double r22670 = r22660 * r22669;
        double r22671 = r22657 + r22670;
        double r22672 = acos(r22671);
        double r22673 = exp(r22672);
        double r22674 = log(r22673);
        double r22675 = log(r22674);
        double r22676 = exp(r22675);
        double r22677 = R;
        double r22678 = r22676 * r22677;
        return r22678;
}

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-exp-log3.7

    \[\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 \lambda_2\right)\right)\right)}} \cdot R\]
  6. Using strategy rm
  7. Applied add-log-exp3.7

    \[\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 \lambda_2\right)\right)}\right)\right)}} \cdot R\]
  8. Final simplification3.7

    \[\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 \lambda_2\right)\right)}\right)\right)} \cdot R\]

Reproduce

herbie shell --seed 2019354 
(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))