Average Error: 13.7 → 0.2
Time: 14.6s
Precision: binary64
\[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)} \]
\[\tan^{-1}_* \frac{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \frac{{\sin \lambda_2}^{3} \cdot {\sin \lambda_1}^{3} + {\cos \lambda_2}^{3} \cdot {\cos \lambda_1}^{3}}{\left({\cos \lambda_2}^{2} \cdot {\cos \lambda_1}^{2} + {\sin \lambda_2}^{2} \cdot {\sin \lambda_1}^{2}\right) - \sin \lambda_2 \cdot \left(\sin \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)}} \]
(FPCore (lambda1 lambda2 phi1 phi2)
 :precision binary64
 (atan2
  (* (sin (- lambda1 lambda2)) (cos phi2))
  (-
   (* (cos phi1) (sin phi2))
   (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
(FPCore (lambda1 lambda2 phi1 phi2)
 :precision binary64
 (atan2
  (*
   (- (* (cos lambda2) (sin lambda1)) (* (cos lambda1) (sin lambda2)))
   (cos phi2))
  (-
   (* (cos phi1) (sin phi2))
   (*
    (* (cos phi2) (sin phi1))
    (/
     (+
      (* (pow (sin lambda2) 3.0) (pow (sin lambda1) 3.0))
      (* (pow (cos lambda2) 3.0) (pow (cos lambda1) 3.0)))
     (-
      (+
       (* (pow (cos lambda2) 2.0) (pow (cos lambda1) 2.0))
       (* (pow (sin lambda2) 2.0) (pow (sin lambda1) 2.0)))
      (* (sin lambda2) (* (sin lambda1) (* (cos lambda2) (cos lambda1))))))))))
double code(double lambda1, double lambda2, double phi1, double phi2) {
	return atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
}
double code(double lambda1, double lambda2, double phi1, double phi2) {
	return atan2((((cos(lambda2) * sin(lambda1)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * (((pow(sin(lambda2), 3.0) * pow(sin(lambda1), 3.0)) + (pow(cos(lambda2), 3.0) * pow(cos(lambda1), 3.0))) / (((pow(cos(lambda2), 2.0) * pow(cos(lambda1), 2.0)) + (pow(sin(lambda2), 2.0) * pow(sin(lambda1), 2.0))) - (sin(lambda2) * (sin(lambda1) * (cos(lambda2) * cos(lambda1)))))))));
}
real(8) function code(lambda1, lambda2, phi1, phi2)
    real(8), intent (in) :: lambda1
    real(8), intent (in) :: lambda2
    real(8), intent (in) :: phi1
    real(8), intent (in) :: phi2
    code = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))))
end function
real(8) function code(lambda1, lambda2, phi1, phi2)
    real(8), intent (in) :: lambda1
    real(8), intent (in) :: lambda2
    real(8), intent (in) :: phi1
    real(8), intent (in) :: phi2
    code = atan2((((cos(lambda2) * sin(lambda1)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * ((((sin(lambda2) ** 3.0d0) * (sin(lambda1) ** 3.0d0)) + ((cos(lambda2) ** 3.0d0) * (cos(lambda1) ** 3.0d0))) / ((((cos(lambda2) ** 2.0d0) * (cos(lambda1) ** 2.0d0)) + ((sin(lambda2) ** 2.0d0) * (sin(lambda1) ** 2.0d0))) - (sin(lambda2) * (sin(lambda1) * (cos(lambda2) * cos(lambda1)))))))))
end function
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
	return Math.atan2((Math.sin((lambda1 - lambda2)) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.sin(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2)))));
}
public static double code(double lambda1, double lambda2, double phi1, double phi2) {
	return Math.atan2((((Math.cos(lambda2) * Math.sin(lambda1)) - (Math.cos(lambda1) * Math.sin(lambda2))) * Math.cos(phi2)), ((Math.cos(phi1) * Math.sin(phi2)) - ((Math.cos(phi2) * Math.sin(phi1)) * (((Math.pow(Math.sin(lambda2), 3.0) * Math.pow(Math.sin(lambda1), 3.0)) + (Math.pow(Math.cos(lambda2), 3.0) * Math.pow(Math.cos(lambda1), 3.0))) / (((Math.pow(Math.cos(lambda2), 2.0) * Math.pow(Math.cos(lambda1), 2.0)) + (Math.pow(Math.sin(lambda2), 2.0) * Math.pow(Math.sin(lambda1), 2.0))) - (Math.sin(lambda2) * (Math.sin(lambda1) * (Math.cos(lambda2) * Math.cos(lambda1)))))))));
}
def code(lambda1, lambda2, phi1, phi2):
	return math.atan2((math.sin((lambda1 - lambda2)) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.sin(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2)))))
def code(lambda1, lambda2, phi1, phi2):
	return math.atan2((((math.cos(lambda2) * math.sin(lambda1)) - (math.cos(lambda1) * math.sin(lambda2))) * math.cos(phi2)), ((math.cos(phi1) * math.sin(phi2)) - ((math.cos(phi2) * math.sin(phi1)) * (((math.pow(math.sin(lambda2), 3.0) * math.pow(math.sin(lambda1), 3.0)) + (math.pow(math.cos(lambda2), 3.0) * math.pow(math.cos(lambda1), 3.0))) / (((math.pow(math.cos(lambda2), 2.0) * math.pow(math.cos(lambda1), 2.0)) + (math.pow(math.sin(lambda2), 2.0) * math.pow(math.sin(lambda1), 2.0))) - (math.sin(lambda2) * (math.sin(lambda1) * (math.cos(lambda2) * math.cos(lambda1)))))))))
function code(lambda1, lambda2, phi1, phi2)
	return atan(Float64(sin(Float64(lambda1 - lambda2)) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(sin(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2)))))
end
function code(lambda1, lambda2, phi1, phi2)
	return atan(Float64(Float64(Float64(cos(lambda2) * sin(lambda1)) - Float64(cos(lambda1) * sin(lambda2))) * cos(phi2)), Float64(Float64(cos(phi1) * sin(phi2)) - Float64(Float64(cos(phi2) * sin(phi1)) * Float64(Float64(Float64((sin(lambda2) ^ 3.0) * (sin(lambda1) ^ 3.0)) + Float64((cos(lambda2) ^ 3.0) * (cos(lambda1) ^ 3.0))) / Float64(Float64(Float64((cos(lambda2) ^ 2.0) * (cos(lambda1) ^ 2.0)) + Float64((sin(lambda2) ^ 2.0) * (sin(lambda1) ^ 2.0))) - Float64(sin(lambda2) * Float64(sin(lambda1) * Float64(cos(lambda2) * cos(lambda1)))))))))
end
function tmp = code(lambda1, lambda2, phi1, phi2)
	tmp = atan2((sin((lambda1 - lambda2)) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
end
function tmp = code(lambda1, lambda2, phi1, phi2)
	tmp = atan2((((cos(lambda2) * sin(lambda1)) - (cos(lambda1) * sin(lambda2))) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((cos(phi2) * sin(phi1)) * ((((sin(lambda2) ^ 3.0) * (sin(lambda1) ^ 3.0)) + ((cos(lambda2) ^ 3.0) * (cos(lambda1) ^ 3.0))) / ((((cos(lambda2) ^ 2.0) * (cos(lambda1) ^ 2.0)) + ((sin(lambda2) ^ 2.0) * (sin(lambda1) ^ 2.0))) - (sin(lambda2) * (sin(lambda1) * (cos(lambda2) * cos(lambda1)))))))));
end
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[Sin[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Sin[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
code[lambda1_, lambda2_, phi1_, phi2_] := N[ArcTan[N[(N[(N[(N[Cos[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] / N[(N[(N[Cos[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] - N[(N[(N[Cos[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[Power[N[Sin[lambda2], $MachinePrecision], 3.0], $MachinePrecision] * N[Power[N[Sin[lambda1], $MachinePrecision], 3.0], $MachinePrecision]), $MachinePrecision] + N[(N[Power[N[Cos[lambda2], $MachinePrecision], 3.0], $MachinePrecision] * N[Power[N[Cos[lambda1], $MachinePrecision], 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(N[(N[Power[N[Cos[lambda2], $MachinePrecision], 2.0], $MachinePrecision] * N[Power[N[Cos[lambda1], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] + N[(N[Power[N[Sin[lambda2], $MachinePrecision], 2.0], $MachinePrecision] * N[Power[N[Sin[lambda1], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[Sin[lambda2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\tan^{-1}_* \frac{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \frac{{\sin \lambda_2}^{3} \cdot {\sin \lambda_1}^{3} + {\cos \lambda_2}^{3} \cdot {\cos \lambda_1}^{3}}{\left({\cos \lambda_2}^{2} \cdot {\cos \lambda_1}^{2} + {\sin \lambda_2}^{2} \cdot {\sin \lambda_1}^{2}\right) - \sin \lambda_2 \cdot \left(\sin \lambda_1 \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)}}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 13.7

    \[\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)} \]
  2. Applied egg-rr7.0

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

    \[\leadsto \tan^{-1}_* \frac{\left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}} \]
  4. Taylor expanded in lambda1 around inf 0.2

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

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

Reproduce

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