Average Error: 1.0 → 0.2
Time: 18.6s
Precision: binary64
\[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)} \]
\[\begin{array}{l} t_0 := \sqrt[3]{\sin \lambda_1}\\ \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \left(-\sin \lambda_2\right)\right)\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \left(t_0 \cdot t_0\right) \cdot \left(\sin \lambda_2 \cdot t_0\right)\right)} \end{array} \]
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\begin{array}{l}
t_0 := \sqrt[3]{\sin \lambda_1}\\
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \left(-\sin \lambda_2\right)\right)\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \left(t_0 \cdot t_0\right) \cdot \left(\sin \lambda_2 \cdot t_0\right)\right)}
\end{array}
(FPCore (lambda1 lambda2 phi1 phi2)
 :precision binary64
 (+
  lambda1
  (atan2
   (* (cos phi2) (sin (- lambda1 lambda2)))
   (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))
(FPCore (lambda1 lambda2 phi1 phi2)
 :precision binary64
 (let* ((t_0 (cbrt (sin lambda1))))
   (+
    lambda1
    (atan2
     (*
      (cos phi2)
      (expm1
       (log1p
        (fma
         (cos lambda2)
         (sin lambda1)
         (* (cos lambda1) (- (sin lambda2)))))))
     (+
      (cos phi1)
      (*
       (cos phi2)
       (fma
        (cos lambda2)
        (cos lambda1)
        (* (* t_0 t_0) (* (sin lambda2) t_0)))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
	return lambda1 + atan2((cos(phi2) * sin(lambda1 - lambda2)), (cos(phi1) + (cos(phi2) * cos(lambda1 - lambda2))));
}
double code(double lambda1, double lambda2, double phi1, double phi2) {
	double t_0 = cbrt(sin(lambda1));
	return lambda1 + atan2((cos(phi2) * expm1(log1p(fma(cos(lambda2), sin(lambda1), (cos(lambda1) * -sin(lambda2)))))), (cos(phi1) + (cos(phi2) * fma(cos(lambda2), cos(lambda1), ((t_0 * t_0) * (sin(lambda2) * t_0))))));
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 1.0

    \[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)} \]
  2. Using strategy rm
  3. Applied cos-diff_binary640.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}} \]
  4. Applied distribute-rgt-in_binary640.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)}} \]
  5. Applied associate-+r+_binary640.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\color{blue}{\left(\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}} \]
  6. Applied associate-+l+_binary640.9

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\color{blue}{\cos \phi_1 + \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)}} \]
  7. Simplified0.9

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \]
  10. Applied fma-neg_binary640.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, -\cos \lambda_1 \cdot \sin \lambda_2\right)}}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \]
  11. Simplified0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \color{blue}{\sin \left(-\lambda_2\right) \cdot \cos \lambda_1}\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \]
  12. Using strategy rm
  13. Applied expm1-log1p-u_binary640.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \sin \left(-\lambda_2\right) \cdot \cos \lambda_1\right)\right)\right)}}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \]
  14. Simplified0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\mathsf{fma}\left(\cos \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \left(-\sin \lambda_2\right)\right)\right)}\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)} \]
  15. Using strategy rm
  16. Applied add-cube-cbrt_binary640.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \left(-\sin \lambda_2\right)\right)\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \sqrt[3]{\sin \lambda_1}\right)} \cdot \sin \lambda_2\right)} \]
  17. Applied associate-*l*_binary640.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \left(-\sin \lambda_2\right)\right)\right)\right)}{\cos \phi_1 + \cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \color{blue}{\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sqrt[3]{\sin \lambda_1} \cdot \sin \lambda_2\right)}\right)} \]
  18. Simplified0.2

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

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

Reproduce

herbie shell --seed 2021211 
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Midpoint on a great circle"
  :precision binary64
  (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))