Average Error: 0.2 → 0.2
Time: 14.6s
Precision: 64
\[\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\]
\[\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}}\]
\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}
\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r88831 = lambda1;
        double r88832 = theta;
        double r88833 = sin(r88832);
        double r88834 = delta;
        double r88835 = sin(r88834);
        double r88836 = r88833 * r88835;
        double r88837 = phi1;
        double r88838 = cos(r88837);
        double r88839 = r88836 * r88838;
        double r88840 = cos(r88834);
        double r88841 = sin(r88837);
        double r88842 = r88841 * r88840;
        double r88843 = r88838 * r88835;
        double r88844 = cos(r88832);
        double r88845 = r88843 * r88844;
        double r88846 = r88842 + r88845;
        double r88847 = asin(r88846);
        double r88848 = sin(r88847);
        double r88849 = r88841 * r88848;
        double r88850 = r88840 - r88849;
        double r88851 = atan2(r88839, r88850);
        double r88852 = r88831 + r88851;
        return r88852;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r88853 = lambda1;
        double r88854 = theta;
        double r88855 = sin(r88854);
        double r88856 = delta;
        double r88857 = sin(r88856);
        double r88858 = r88855 * r88857;
        double r88859 = phi1;
        double r88860 = cos(r88859);
        double r88861 = r88858 * r88860;
        double r88862 = cos(r88856);
        double r88863 = r88862 * r88862;
        double r88864 = sin(r88859);
        double r88865 = r88864 * r88862;
        double r88866 = r88860 * r88857;
        double r88867 = cos(r88854);
        double r88868 = r88866 * r88867;
        double r88869 = r88865 + r88868;
        double r88870 = asin(r88869);
        double r88871 = sin(r88870);
        double r88872 = r88864 * r88871;
        double r88873 = r88872 * r88872;
        double r88874 = r88863 - r88873;
        double r88875 = atan2(1.0, 0.0);
        double r88876 = 2.0;
        double r88877 = r88875 / r88876;
        double r88878 = acos(r88869);
        double r88879 = r88877 - r88878;
        double r88880 = sin(r88879);
        double r88881 = r88864 * r88880;
        double r88882 = r88862 + r88881;
        double r88883 = r88874 / r88882;
        double r88884 = atan2(r88861, r88883);
        double r88885 = r88853 + r88884;
        return r88885;
}

Error

Bits error versus lambda1

Bits error versus phi1

Bits error versus phi2

Bits error versus delta

Bits error versus theta

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.2

    \[\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\]
  2. Using strategy rm
  3. Applied flip--0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\color{blue}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}}}\]
  4. Using strategy rm
  5. Applied asin-acos0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \color{blue}{\left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}}}\]
  6. Final simplification0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}}\]

Reproduce

herbie shell --seed 2020046 
(FPCore (lambda1 phi1 phi2 delta theta)
  :name "Destination given bearing on a great circle"
  :precision binary64
  (+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))