Average Error: 24.6 → 24.8
Time: 53.7s
Precision: 64
\[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
\[\tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\left(\sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)\right)} \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}} \cdot \left(R + R\right)\]
R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)
\tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\left(\sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)\right)} \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}} \cdot \left(R + R\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3184127 = R;
        double r3184128 = 2.0;
        double r3184129 = phi1;
        double r3184130 = phi2;
        double r3184131 = r3184129 - r3184130;
        double r3184132 = r3184131 / r3184128;
        double r3184133 = sin(r3184132);
        double r3184134 = pow(r3184133, r3184128);
        double r3184135 = cos(r3184129);
        double r3184136 = cos(r3184130);
        double r3184137 = r3184135 * r3184136;
        double r3184138 = lambda1;
        double r3184139 = lambda2;
        double r3184140 = r3184138 - r3184139;
        double r3184141 = r3184140 / r3184128;
        double r3184142 = sin(r3184141);
        double r3184143 = r3184137 * r3184142;
        double r3184144 = r3184143 * r3184142;
        double r3184145 = r3184134 + r3184144;
        double r3184146 = sqrt(r3184145);
        double r3184147 = 1.0;
        double r3184148 = r3184147 - r3184145;
        double r3184149 = sqrt(r3184148);
        double r3184150 = atan2(r3184146, r3184149);
        double r3184151 = r3184128 * r3184150;
        double r3184152 = r3184127 * r3184151;
        return r3184152;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3184153 = lambda1;
        double r3184154 = lambda2;
        double r3184155 = r3184153 - r3184154;
        double r3184156 = 2.0;
        double r3184157 = r3184155 / r3184156;
        double r3184158 = sin(r3184157);
        double r3184159 = phi1;
        double r3184160 = cos(r3184159);
        double r3184161 = phi2;
        double r3184162 = cos(r3184161);
        double r3184163 = r3184160 * r3184162;
        double r3184164 = r3184158 * r3184163;
        double r3184165 = r3184159 - r3184161;
        double r3184166 = r3184165 / r3184156;
        double r3184167 = sin(r3184166);
        double r3184168 = cbrt(r3184167);
        double r3184169 = r3184168 * r3184168;
        double r3184170 = r3184169 * r3184168;
        double r3184171 = r3184167 * r3184170;
        double r3184172 = r3184167 * r3184171;
        double r3184173 = cbrt(r3184172);
        double r3184174 = r3184173 * r3184167;
        double r3184175 = fma(r3184164, r3184158, r3184174);
        double r3184176 = sqrt(r3184175);
        double r3184177 = cos(r3184166);
        double r3184178 = r3184177 * r3184177;
        double r3184179 = r3184164 * r3184158;
        double r3184180 = r3184178 - r3184179;
        double r3184181 = sqrt(r3184180);
        double r3184182 = atan2(r3184176, r3184181);
        double r3184183 = R;
        double r3184184 = r3184183 + r3184183;
        double r3184185 = r3184182 * r3184184;
        return r3184185;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 24.6

    \[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
  2. Simplified24.6

    \[\leadsto \color{blue}{\left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}}\]
  3. Using strategy rm
  4. Applied add-cbrt-cube24.8

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \color{blue}{\sqrt[3]{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)}}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\]
  5. Using strategy rm
  6. Applied add-cube-cbrt24.8

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sqrt[3]{\left(\color{blue}{\left(\left(\sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)} \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\]
  7. Final simplification24.8

    \[\leadsto \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \left(\left(\sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)\right)} \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}} \cdot \left(R + R\right)\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Distance on a great circle"
  (* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))