Average Error: 16.6 → 3.7
Time: 14.6s
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} - \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 \left(-\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
\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 \left(-\lambda_2\right)\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27088 = phi1;
        double r27089 = sin(r27088);
        double r27090 = phi2;
        double r27091 = sin(r27090);
        double r27092 = r27089 * r27091;
        double r27093 = cos(r27088);
        double r27094 = cos(r27090);
        double r27095 = r27093 * r27094;
        double r27096 = lambda1;
        double r27097 = lambda2;
        double r27098 = r27096 - r27097;
        double r27099 = cos(r27098);
        double r27100 = r27095 * r27099;
        double r27101 = r27092 + r27100;
        double r27102 = acos(r27101);
        double r27103 = R;
        double r27104 = r27102 * r27103;
        return r27104;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27105 = atan2(1.0, 0.0);
        double r27106 = 2.0;
        double r27107 = r27105 / r27106;
        double r27108 = phi1;
        double r27109 = sin(r27108);
        double r27110 = phi2;
        double r27111 = sin(r27110);
        double r27112 = r27109 * r27111;
        double r27113 = cos(r27108);
        double r27114 = cos(r27110);
        double r27115 = r27113 * r27114;
        double r27116 = lambda1;
        double r27117 = cos(r27116);
        double r27118 = lambda2;
        double r27119 = cos(r27118);
        double r27120 = r27117 * r27119;
        double r27121 = sin(r27116);
        double r27122 = -r27118;
        double r27123 = sin(r27122);
        double r27124 = r27121 * r27123;
        double r27125 = r27120 - r27124;
        double r27126 = r27115 * r27125;
        double r27127 = r27112 + r27126;
        double r27128 = asin(r27127);
        double r27129 = r27107 - r27128;
        double r27130 = R;
        double r27131 = r27129 * r27130;
        return r27131;
}

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

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

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

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

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

Reproduce

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