Average Error: 0.9 → 0.3
Time: 34.3s
Precision: 64
\[\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)}\]
\[\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\sqrt[3]{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)\right) \cdot \log \left(e^{\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)}\right)} + \cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)} + \lambda_1\]
\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)}
\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\sqrt[3]{\left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)\right) \cdot \log \left(e^{\mathsf{fma}\left(\cos \phi_2 \cdot \cos \lambda_2, \cos \lambda_1, \cos \phi_1\right)}\right)} + \cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)} + \lambda_1
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r2167656 = lambda1;
        double r2167657 = phi2;
        double r2167658 = cos(r2167657);
        double r2167659 = lambda2;
        double r2167660 = r2167656 - r2167659;
        double r2167661 = sin(r2167660);
        double r2167662 = r2167658 * r2167661;
        double r2167663 = phi1;
        double r2167664 = cos(r2167663);
        double r2167665 = cos(r2167660);
        double r2167666 = r2167658 * r2167665;
        double r2167667 = r2167664 + r2167666;
        double r2167668 = atan2(r2167662, r2167667);
        double r2167669 = r2167656 + r2167668;
        return r2167669;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r2167670 = phi2;
        double r2167671 = cos(r2167670);
        double r2167672 = lambda1;
        double r2167673 = sin(r2167672);
        double r2167674 = lambda2;
        double r2167675 = cos(r2167674);
        double r2167676 = r2167673 * r2167675;
        double r2167677 = cos(r2167672);
        double r2167678 = sin(r2167674);
        double r2167679 = r2167677 * r2167678;
        double r2167680 = r2167676 - r2167679;
        double r2167681 = r2167671 * r2167680;
        double r2167682 = r2167671 * r2167675;
        double r2167683 = phi1;
        double r2167684 = cos(r2167683);
        double r2167685 = fma(r2167682, r2167677, r2167684);
        double r2167686 = r2167685 * r2167685;
        double r2167687 = exp(r2167685);
        double r2167688 = log(r2167687);
        double r2167689 = r2167686 * r2167688;
        double r2167690 = cbrt(r2167689);
        double r2167691 = r2167678 * r2167673;
        double r2167692 = r2167671 * r2167691;
        double r2167693 = r2167690 + r2167692;
        double r2167694 = atan2(r2167681, r2167693);
        double r2167695 = r2167694 + r2167672;
        return r2167695;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 0.9

    \[\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 sin-diff0.8

    \[\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 \cos \left(\lambda_1 - \lambda_2\right)}\]
  4. Using strategy rm
  5. Applied cos-diff0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \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)}}\]
  6. Applied distribute-lft-in0.2

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

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

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\color{blue}{\sqrt[3]{\left(\mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \lambda_1, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \lambda_1, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_2 \cdot \cos \phi_2, \cos \lambda_1, \cos \phi_1\right)}} + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  11. Using strategy rm
  12. Applied add-log-exp0.3

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

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

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Midpoint on a great circle"
  (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))