Average Error: 39.2 → 33.8
Time: 13.6s
Precision: binary64
\[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
\[\begin{array}{l} \mathbf{if}\;\phi_2 \leq 1.902488693416451 \cdot 10^{+84}:\\ \;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}}\right)}^{6} \cdot \left({\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6} \cdot {\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]
R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\begin{array}{l}
\mathbf{if}\;\phi_2 \leq 1.902488693416451 \cdot 10^{+84}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}}\right)}^{6} \cdot \left({\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6} \cdot {\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\

\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\

\end{array}
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (*
  R
  (sqrt
   (+
    (*
     (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))
     (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))
    (* (- phi1 phi2) (- phi1 phi2))))))
(FPCore (R lambda1 lambda2 phi1 phi2)
 :precision binary64
 (if (<= phi2 1.902488693416451e+84)
   (*
    R
    (sqrt
     (+
      (*
       (- lambda1 lambda2)
       (*
        (- lambda1 lambda2)
        (*
         (pow (cbrt (cbrt (cos (/ (+ phi2 phi1) 2.0)))) 6.0)
         (*
          (pow (cbrt (fabs (cbrt (cos (/ (+ phi2 phi1) 2.0))))) 6.0)
          (pow (cbrt (fabs (cbrt (cos (/ (+ phi2 phi1) 2.0))))) 6.0)))))
      (* (- phi1 phi2) (- phi1 phi2)))))
   (* R (- phi2 phi1))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	return ((double) (R * ((double) sqrt(((double) (((double) (((double) (((double) (lambda1 - lambda2)) * ((double) cos((((double) (phi1 + phi2)) / 2.0))))) * ((double) (((double) (lambda1 - lambda2)) * ((double) cos((((double) (phi1 + phi2)) / 2.0))))))) + ((double) (((double) (phi1 - phi2)) * ((double) (phi1 - phi2))))))))));
}
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
	double tmp;
	if ((phi2 <= 1.902488693416451e+84)) {
		tmp = ((double) (R * ((double) sqrt(((double) (((double) (((double) (lambda1 - lambda2)) * ((double) (((double) (lambda1 - lambda2)) * ((double) (((double) pow(((double) cbrt(((double) cbrt(((double) cos((((double) (phi2 + phi1)) / 2.0))))))), 6.0)) * ((double) (((double) pow(((double) cbrt(((double) fabs(((double) cbrt(((double) cos((((double) (phi2 + phi1)) / 2.0))))))))), 6.0)) * ((double) pow(((double) cbrt(((double) fabs(((double) cbrt(((double) cos((((double) (phi2 + phi1)) / 2.0))))))))), 6.0)))))))))) + ((double) (((double) (phi1 - phi2)) * ((double) (phi1 - phi2))))))))));
	} else {
		tmp = ((double) (R * ((double) (phi2 - phi1))));
	}
	return tmp;
}

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. Split input into 2 regimes
  2. if phi2 < 1.902488693416451e84

    1. Initial program Error: 36.4 bits

      \[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    2. SimplifiedError: 36.4 bits

      \[\leadsto \color{blue}{R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}}\]
    3. Using strategy rm
    4. Applied add-log-expError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    5. SimplifiedError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \log \color{blue}{\left(e^{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{6}}\right)}\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    6. Using strategy rm
    7. Applied add-cube-cbrtError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{{\left(\sqrt[3]{\color{blue}{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}}\right)}^{6}}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    8. Applied cbrt-prodError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{{\color{blue}{\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}} \cdot \sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}}^{6}}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    9. Applied unpow-prod-downError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\color{blue}{{\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot {\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6}}}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    10. Applied exp-prodError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \log \color{blue}{\left({\left(e^{{\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6}}\right)}^{\left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6}\right)}\right)}\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    11. Applied log-powError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot \log \left(e^{{\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6}}\right)\right)}\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    12. SimplifiedError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot \color{blue}{{\left(\sqrt[3]{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}\right)}^{6}}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    13. Using strategy rm
    14. Applied add-sqr-sqrtError: 36.4 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot {\left(\sqrt[3]{\color{blue}{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}} \cdot \sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}}}\right)}^{6}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    15. Applied cbrt-prodError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot {\color{blue}{\left(\sqrt[3]{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}} \cdot \sqrt[3]{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}}\right)}}^{6}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    16. Applied unpow-prod-downError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot \color{blue}{\left({\left(\sqrt[3]{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}}\right)}^{6} \cdot {\left(\sqrt[3]{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}}\right)}^{6}\right)}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    17. SimplifiedError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot \left(\color{blue}{{\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right|}\right)}^{6}} \cdot {\left(\sqrt[3]{\sqrt{{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}^{2}}}\right)}^{6}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    18. SimplifiedError: 36.5 bits

      \[\leadsto R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right)}^{6} \cdot \left({\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right|}\right)}^{6} \cdot \color{blue}{{\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right|}\right)}^{6}}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]

    if 1.902488693416451e84 < phi2

    1. Initial program Error: 53.6 bits

      \[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    2. SimplifiedError: 53.6 bits

      \[\leadsto \color{blue}{R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}}\]
    3. Taylor expanded around 0 Error: 20.3 bits

      \[\leadsto R \cdot \color{blue}{\left(\phi_2 - \phi_1\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplificationError: 33.8 bits

    \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \leq 1.902488693416451 \cdot 10^{+84}:\\ \;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left({\left(\sqrt[3]{\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}}\right)}^{6} \cdot \left({\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6} \cdot {\left(\sqrt[3]{\left|\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right|}\right)}^{6}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020203 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  :precision binary64
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))