Average Error: 16.9 → 3.6
Time: 38.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\]
\[\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \cos^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) + \sin \phi_2 \cdot \sin \phi_1\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
\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \cos^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) + \sin \phi_2 \cdot \sin \phi_1\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1649089 = phi1;
        double r1649090 = sin(r1649089);
        double r1649091 = phi2;
        double r1649092 = sin(r1649091);
        double r1649093 = r1649090 * r1649092;
        double r1649094 = cos(r1649089);
        double r1649095 = cos(r1649091);
        double r1649096 = r1649094 * r1649095;
        double r1649097 = lambda1;
        double r1649098 = lambda2;
        double r1649099 = r1649097 - r1649098;
        double r1649100 = cos(r1649099);
        double r1649101 = r1649096 * r1649100;
        double r1649102 = r1649093 + r1649101;
        double r1649103 = acos(r1649102);
        double r1649104 = R;
        double r1649105 = r1649103 * r1649104;
        return r1649105;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1649106 = atan2(1.0, 0.0);
        double r1649107 = 2.0;
        double r1649108 = r1649106 / r1649107;
        double r1649109 = phi2;
        double r1649110 = cos(r1649109);
        double r1649111 = phi1;
        double r1649112 = cos(r1649111);
        double r1649113 = r1649110 * r1649112;
        double r1649114 = lambda1;
        double r1649115 = sin(r1649114);
        double r1649116 = lambda2;
        double r1649117 = sin(r1649116);
        double r1649118 = r1649115 * r1649117;
        double r1649119 = cos(r1649114);
        double r1649120 = cos(r1649116);
        double r1649121 = r1649119 * r1649120;
        double r1649122 = r1649118 + r1649121;
        double r1649123 = r1649113 * r1649122;
        double r1649124 = sin(r1649109);
        double r1649125 = sin(r1649111);
        double r1649126 = r1649124 * r1649125;
        double r1649127 = r1649123 + r1649126;
        double r1649128 = acos(r1649127);
        double r1649129 = r1649108 - r1649128;
        double r1649130 = r1649108 - r1649129;
        double r1649131 = R;
        double r1649132 = r1649130 * r1649131;
        return r1649132;
}

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 acos-asin3.7

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-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 asin-acos3.6

    \[\leadsto \left(\frac{\pi}{2} - \color{blue}{\left(\frac{\pi}{2} - \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.6

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

Reproduce

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