Average Error: 0.2 → 0.2
Time: 14.8s
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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r100077 = lambda1;
        double r100078 = theta;
        double r100079 = sin(r100078);
        double r100080 = delta;
        double r100081 = sin(r100080);
        double r100082 = r100079 * r100081;
        double r100083 = phi1;
        double r100084 = cos(r100083);
        double r100085 = r100082 * r100084;
        double r100086 = cos(r100080);
        double r100087 = sin(r100083);
        double r100088 = r100087 * r100086;
        double r100089 = r100084 * r100081;
        double r100090 = cos(r100078);
        double r100091 = r100089 * r100090;
        double r100092 = r100088 + r100091;
        double r100093 = asin(r100092);
        double r100094 = sin(r100093);
        double r100095 = r100087 * r100094;
        double r100096 = r100086 - r100095;
        double r100097 = atan2(r100085, r100096);
        double r100098 = r100077 + r100097;
        return r100098;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r100099 = lambda1;
        double r100100 = theta;
        double r100101 = sin(r100100);
        double r100102 = delta;
        double r100103 = sin(r100102);
        double r100104 = r100101 * r100103;
        double r100105 = phi1;
        double r100106 = cos(r100105);
        double r100107 = r100104 * r100106;
        double r100108 = cos(r100102);
        double r100109 = sin(r100105);
        double r100110 = r100109 * r100108;
        double r100111 = r100106 * r100103;
        double r100112 = cos(r100100);
        double r100113 = r100111 * r100112;
        double r100114 = r100110 + r100113;
        double r100115 = asin(r100114);
        double r100116 = sin(r100115);
        double r100117 = r100109 * r100116;
        double r100118 = r100108 - r100117;
        double r100119 = log1p(r100118);
        double r100120 = expm1(r100119);
        double r100121 = atan2(r100107, r100120);
        double r100122 = r100099 + r100121;
        return r100122;
}

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 expm1-log1p-u0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)}}\]
  4. Final simplification0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)}\]

Reproduce

herbie shell --seed 2020062 +o rules:numerics
(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))))))))))