
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
(acos
(+
(* (sin phi1) (sin phi2))
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 32 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(*
(acos
(+
(* (sin phi1) (sin phi2))
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * r
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return Math.acos(((Math.sin(phi1) * Math.sin(phi2)) + ((Math.cos(phi1) * Math.cos(phi2)) * Math.cos((lambda1 - lambda2))))) * R;
}
def code(R, lambda1, lambda2, phi1, phi2): return math.acos(((math.sin(phi1) * math.sin(phi2)) + ((math.cos(phi1) * math.cos(phi2)) * math.cos((lambda1 - lambda2))))) * R
function code(R, lambda1, lambda2, phi1, phi2) return Float64(acos(Float64(Float64(sin(phi1) * sin(phi2)) + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = acos(((sin(phi1) * sin(phi2)) + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(N[ArcCos[N[(N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R), $MachinePrecision]
\begin{array}{l}
\\
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\end{array}
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))))
(*
R_s
(if (<=
(*
(acos
(+ t_0 (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
R_m)
0.0)
(* lambda1 (- (/ (* lambda2 R_m) lambda1) R_m))
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(cos phi1)
t_0)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi1) * sin(phi2);
double tmp;
if ((acos((t_0 + ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2))))) * R_m) <= 0.0) {
tmp = lambda1 * (((lambda2 * R_m) / lambda1) - R_m);
} else {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), cos(phi1), t_0));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi1) * sin(phi2)) tmp = 0.0 if (Float64(acos(Float64(t_0 + Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2))))) * R_m) <= 0.0) tmp = Float64(lambda1 * Float64(Float64(Float64(lambda2 * R_m) / lambda1) - R_m)); else tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), cos(phi1), t_0))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[N[(N[ArcCos[N[(t$95$0 + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * R$95$m), $MachinePrecision], 0.0], N[(lambda1 * N[(N[(N[(lambda2 * R$95$m), $MachinePrecision] / lambda1), $MachinePrecision] - R$95$m), $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\cos^{-1} \left(t\_0 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\_m \leq 0:\\
\;\;\;\;\lambda_1 \cdot \left(\frac{\lambda_2 \cdot R\_m}{\lambda_1} - R\_m\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_1, t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if (*.f64 (acos.f64 (+.f64 (*.f64 (sin.f64 phi1) (sin.f64 phi2)) (*.f64 (*.f64 (cos.f64 phi1) (cos.f64 phi2)) (cos.f64 (-.f64 lambda1 lambda2))))) R) < 0.0Initial program 70.2%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6439.9
Simplified39.9%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6425.6
Simplified25.6%
flip--N/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
difference-of-squaresN/A
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f6425.6
lift-acos.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
Applied egg-rr13.6%
Taylor expanded in lambda1 around inf
lower-*.f64N/A
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f647.9
Simplified7.9%
if 0.0 < (*.f64 (acos.f64 (+.f64 (*.f64 (sin.f64 phi1) (sin.f64 phi2)) (*.f64 (*.f64 (cos.f64 phi1) (cos.f64 phi2)) (cos.f64 (-.f64 lambda1 lambda2))))) R) Initial program 83.9%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6483.9
Applied egg-rr83.9%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6498.7
Applied egg-rr98.7%
Final simplification55.8%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* (cos phi1) (cos phi2)))
(t_2 (* (sin phi1) (sin phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma (* PI 0.5) R_m (* (asin (fma t_0 t_1 t_2)) (- R_m)))
(if (<= phi1 0.057)
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(fma
(* phi1 phi1)
(fma
(* phi1 phi1)
(fma (* phi1 phi1) -0.001388888888888889 0.041666666666666664)
-0.5)
1.0)
t_2)))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double t_2 = sin(phi1) * sin(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, t_2)) * -R_m));
} else if (phi1 <= 0.057) {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), fma((phi1 * phi1), fma((phi1 * phi1), fma((phi1 * phi1), -0.001388888888888889, 0.041666666666666664), -0.5), 1.0), t_2));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) t_2 = Float64(sin(phi1) * sin(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, t_2)) * Float64(-R_m))); elseif (phi1 <= 0.057) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), fma(Float64(phi1 * phi1), fma(Float64(phi1 * phi1), fma(Float64(phi1 * phi1), -0.001388888888888889, 0.041666666666666664), -0.5), 1.0), t_2))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + t$95$2), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.057], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * -0.001388888888888889 + 0.041666666666666664), $MachinePrecision] + -0.5), $MachinePrecision] + 1.0), $MachinePrecision] + t$95$2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
t_2 := \sin \phi_1 \cdot \sin \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, t\_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.057:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \mathsf{fma}\left(\phi_1 \cdot \phi_1, \mathsf{fma}\left(\phi_1 \cdot \phi_1, \mathsf{fma}\left(\phi_1 \cdot \phi_1, -0.001388888888888889, 0.041666666666666664\right), -0.5\right), 1\right), t\_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.0570000000000000021Initial program 69.7%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6469.7
Applied egg-rr69.7%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6489.2
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6489.2
Simplified89.2%
if 0.0570000000000000021 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* (cos phi1) (cos phi2)))
(t_2 (* (sin phi1) (sin phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma (* PI 0.5) R_m (* (asin (fma t_0 t_1 t_2)) (- R_m)))
(if (<= phi1 0.045)
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(fma
(* phi1 phi1)
(fma (* phi1 phi1) 0.041666666666666664 -0.5)
1.0)
t_2)))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double t_2 = sin(phi1) * sin(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, t_2)) * -R_m));
} else if (phi1 <= 0.045) {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), fma((phi1 * phi1), fma((phi1 * phi1), 0.041666666666666664, -0.5), 1.0), t_2));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) t_2 = Float64(sin(phi1) * sin(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, t_2)) * Float64(-R_m))); elseif (phi1 <= 0.045) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), fma(Float64(phi1 * phi1), fma(Float64(phi1 * phi1), 0.041666666666666664, -0.5), 1.0), t_2))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + t$95$2), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.045], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * 0.041666666666666664 + -0.5), $MachinePrecision] + 1.0), $MachinePrecision] + t$95$2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
t_2 := \sin \phi_1 \cdot \sin \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, t\_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.045:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \mathsf{fma}\left(\phi_1 \cdot \phi_1, \mathsf{fma}\left(\phi_1 \cdot \phi_1, 0.041666666666666664, -0.5\right), 1\right), t\_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.044999999999999998Initial program 69.7%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6469.7
Applied egg-rr69.7%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6489.2
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6489.2
Simplified89.2%
if 0.044999999999999998 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))) (t_1 (* (cos phi1) (cos phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma
(* PI 0.5)
R_m
(* (asin (fma t_0 t_1 (* (sin phi1) (sin phi2)))) (- R_m)))
(if (<= phi1 0.045)
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(cos phi1)
(*
phi1
(* (sin phi2) (fma -0.16666666666666666 (* phi1 phi1) 1.0))))))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, (sin(phi1) * sin(phi2)))) * -R_m));
} else if (phi1 <= 0.045) {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), cos(phi1), (phi1 * (sin(phi2) * fma(-0.16666666666666666, (phi1 * phi1), 1.0)))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, Float64(sin(phi1) * sin(phi2)))) * Float64(-R_m))); elseif (phi1 <= 0.045) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), cos(phi1), Float64(phi1 * Float64(sin(phi2) * fma(-0.16666666666666666, Float64(phi1 * phi1), 1.0)))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.045], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(phi1 * N[(N[Sin[phi2], $MachinePrecision] * N[(-0.16666666666666666 * N[(phi1 * phi1), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.045:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_1, \phi_1 \cdot \left(\sin \phi_2 \cdot \mathsf{fma}\left(-0.16666666666666666, \phi_1 \cdot \phi_1, 1\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.044999999999999998Initial program 69.7%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6469.7
Applied egg-rr69.7%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6489.2
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
lower-*.f64N/A
associate-*r*N/A
distribute-rgt1-inN/A
lower-*.f64N/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-sin.f6489.2
Simplified89.2%
if 0.044999999999999998 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2)))
(t_1 (* (cos phi1) (cos phi2)))
(t_2 (* (sin phi1) (sin phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma (* PI 0.5) R_m (* (asin (fma t_0 t_1 t_2)) (- R_m)))
(if (<= phi1 0.0155)
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(fma (* phi1 phi1) -0.5 1.0)
t_2)))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double t_2 = sin(phi1) * sin(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, t_2)) * -R_m));
} else if (phi1 <= 0.0155) {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), fma((phi1 * phi1), -0.5, 1.0), t_2));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) t_2 = Float64(sin(phi1) * sin(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, t_2)) * Float64(-R_m))); elseif (phi1 <= 0.0155) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), fma(Float64(phi1 * phi1), -0.5, 1.0), t_2))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + t$95$2), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.0155], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * -0.5 + 1.0), $MachinePrecision] + t$95$2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
t_2 := \sin \phi_1 \cdot \sin \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, t\_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.0155:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \mathsf{fma}\left(\phi_1 \cdot \phi_1, -0.5, 1\right), t\_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.0155Initial program 69.7%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6469.7
Applied egg-rr69.7%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6489.2
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6489.2
Simplified89.2%
if 0.0155 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))) (t_1 (* (cos phi1) (cos phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma
(* PI 0.5)
R_m
(* (asin (fma t_0 t_1 (* (sin phi1) (sin phi2)))) (- R_m)))
(if (<= phi1 0.0155)
(*
R_m
(acos
(fma
(*
(cos phi2)
(fma (sin lambda2) (sin lambda1) (* (cos lambda1) (cos lambda2))))
(cos phi1)
(* phi1 (sin phi2)))))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, (sin(phi1) * sin(phi2)))) * -R_m));
} else if (phi1 <= 0.0155) {
tmp = R_m * acos(fma((cos(phi2) * fma(sin(lambda2), sin(lambda1), (cos(lambda1) * cos(lambda2)))), cos(phi1), (phi1 * sin(phi2))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, Float64(sin(phi1) * sin(phi2)))) * Float64(-R_m))); elseif (phi1 <= 0.0155) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * fma(sin(lambda2), sin(lambda1), Float64(cos(lambda1) * cos(lambda2)))), cos(phi1), Float64(phi1 * sin(phi2))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.0155], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(phi1 * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.0155:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_1, \phi_1 \cdot \sin \phi_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.0155Initial program 69.7%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6469.7
Applied egg-rr69.7%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lower-fma.f6489.2
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
lower-*.f64N/A
lower-sin.f6489.2
Simplified89.2%
if 0.0155 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))) (t_1 (* (cos phi1) (cos phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma
(* PI 0.5)
R_m
(* (asin (fma t_0 t_1 (* (sin phi1) (sin phi2)))) (- R_m)))
(if (<= phi1 0.0155)
(*
R_m
(acos
(fma
phi1
(sin phi2)
(*
(cos phi2)
(fma
(sin lambda1)
(sin lambda2)
(* (cos lambda1) (cos lambda2)))))))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, (sin(phi1) * sin(phi2)))) * -R_m));
} else if (phi1 <= 0.0155) {
tmp = R_m * acos(fma(phi1, sin(phi2), (cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2))))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, Float64(sin(phi1) * sin(phi2)))) * Float64(-R_m))); elseif (phi1 <= 0.0155) tmp = Float64(R_m * acos(fma(phi1, sin(phi2), Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2))))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 0.0155], N[(R$95$m * N[ArcCos[N[(phi1 * N[Sin[phi2], $MachinePrecision] + N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 0.0155:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\phi_1, \sin \phi_2, \cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 0.0155Initial program 69.7%
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
lower-fma.f64N/A
lower-sin.f64N/A
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.2
Simplified89.2%
if 0.0155 < phi1 Initial program 82.3%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6482.3
lift-*.f64N/A
*-commutativeN/A
lower-*.f6482.3
Applied egg-rr82.3%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))) (t_1 (* (cos phi1) (cos phi2))))
(*
R_s
(if (<= phi1 -2.6e-21)
(fma
(* PI 0.5)
R_m
(* (asin (fma t_0 t_1 (* (sin phi1) (sin phi2)))) (- R_m)))
(if (<= phi1 3.7e-18)
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))))))
(* R_m (acos (fma (sin phi2) (sin phi1) (* t_1 t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double t_1 = cos(phi1) * cos(phi2);
double tmp;
if (phi1 <= -2.6e-21) {
tmp = fma((((double) M_PI) * 0.5), R_m, (asin(fma(t_0, t_1, (sin(phi1) * sin(phi2)))) * -R_m));
} else if (phi1 <= 3.7e-18) {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (t_1 * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) t_1 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (phi1 <= -2.6e-21) tmp = fma(Float64(pi * 0.5), R_m, Float64(asin(fma(t_0, t_1, Float64(sin(phi1) * sin(phi2)))) * Float64(-R_m))); elseif (phi1 <= 3.7e-18) tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(t_1 * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -2.6e-21], N[(N[(Pi * 0.5), $MachinePrecision] * R$95$m + N[(N[ArcSin[N[(t$95$0 * t$95$1 + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-R$95$m)), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.7e-18], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(t$95$1 * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -2.6 \cdot 10^{-21}:\\
\;\;\;\;\mathsf{fma}\left(\pi \cdot 0.5, R\_m, \sin^{-1} \left(\mathsf{fma}\left(t\_0, t\_1, \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot \left(-R\_m\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 3.7 \cdot 10^{-18}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, t\_1 \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -2.60000000000000017e-21Initial program 86.4%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-acos.f64N/A
*-commutativeN/A
Applied egg-rr86.4%
if -2.60000000000000017e-21 < phi1 < 3.7000000000000003e-18Initial program 69.0%
Applied egg-rr88.9%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6488.9
Simplified88.9%
if 3.7000000000000003e-18 < phi1 Initial program 83.0%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6483.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6483.0
Applied egg-rr83.0%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))))
(*
R_s
(if (<= phi1 -1.72e-9)
(*
R_m
(acos (fma (* (cos phi2) t_0) (cos phi1) (* (sin phi1) (sin phi2)))))
(if (<= phi1 3.7e-18)
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))))))
(*
R_m
(acos
(fma (sin phi2) (sin phi1) (* (* (cos phi1) (cos phi2)) t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double tmp;
if (phi1 <= -1.72e-9) {
tmp = R_m * acos(fma((cos(phi2) * t_0), cos(phi1), (sin(phi1) * sin(phi2))));
} else if (phi1 <= 3.7e-18) {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), ((cos(phi1) * cos(phi2)) * t_0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (phi1 <= -1.72e-9) tmp = Float64(R_m * acos(fma(Float64(cos(phi2) * t_0), cos(phi1), Float64(sin(phi1) * sin(phi2))))); elseif (phi1 <= 3.7e-18) tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi1) * cos(phi2)) * t_0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -1.72e-9], N[(R$95$m * N[ArcCos[N[(N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision] * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.7e-18], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.72 \cdot 10^{-9}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot t\_0, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 3.7 \cdot 10^{-18}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if phi1 < -1.72000000000000006e-9Initial program 86.2%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6486.2
Applied egg-rr86.2%
if -1.72000000000000006e-9 < phi1 < 3.7000000000000003e-18Initial program 69.2%
Applied egg-rr89.0%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.0
Simplified89.0%
if 3.7000000000000003e-18 < phi1 Initial program 83.0%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6483.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6483.0
Applied egg-rr83.0%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -1.72e-9)
(*
R_m
(acos
(fma
(sin phi2)
(sin phi1)
(* (cos phi1) (* (cos phi2) (cos (- lambda2 lambda1)))))))
(if (<= phi1 3.7e-18)
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))))))
(*
R_m
(acos
(fma
(sin phi2)
(sin phi1)
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -1.72e-9) {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), (cos(phi1) * (cos(phi2) * cos((lambda2 - lambda1))))));
} else if (phi1 <= 3.7e-18) {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
} else {
tmp = R_m * acos(fma(sin(phi2), sin(phi1), ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -1.72e-9) tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(cos(phi1) * Float64(cos(phi2) * cos(Float64(lambda2 - lambda1))))))); elseif (phi1 <= 3.7e-18) tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); else tmp = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2)))))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -1.72e-9], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, 3.7e-18], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.72 \cdot 10^{-9}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\right)\right)\\
\mathbf{elif}\;\phi_1 \leq 3.7 \cdot 10^{-18}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\\
\end{array}
\end{array}
if phi1 < -1.72000000000000006e-9Initial program 86.2%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6486.2
Applied egg-rr86.2%
lift--.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
distribute-rgt-inN/A
lift-sin.f64N/A
lift-sin.f64N/A
associate-*r*N/A
lift-*.f64N/A
lift-*.f64N/A
Applied egg-rr99.1%
Applied egg-rr86.2%
if -1.72000000000000006e-9 < phi1 < 3.7000000000000003e-18Initial program 69.2%
Applied egg-rr89.0%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.0
Simplified89.0%
if 3.7000000000000003e-18 < phi1 Initial program 83.0%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6483.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6483.0
Applied egg-rr83.0%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0
(*
R_m
(acos
(fma
(sin phi2)
(sin phi1)
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))))))
(*
R_s
(if (<= phi1 -1.72e-9)
t_0
(if (<= phi1 3.7e-18)
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))))))
t_0)))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R_m * acos(fma(sin(phi2), sin(phi1), ((cos(phi1) * cos(phi2)) * cos((lambda1 - lambda2)))));
double tmp;
if (phi1 <= -1.72e-9) {
tmp = t_0;
} else if (phi1 <= 3.7e-18) {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
} else {
tmp = t_0;
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(R_m * acos(fma(sin(phi2), sin(phi1), Float64(Float64(cos(phi1) * cos(phi2)) * cos(Float64(lambda1 - lambda2)))))) tmp = 0.0 if (phi1 <= -1.72e-9) tmp = t_0; elseif (phi1 <= 3.7e-18) tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); else tmp = t_0; end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(R$95$m * N[ArcCos[N[(N[Sin[phi2], $MachinePrecision] * N[Sin[phi1], $MachinePrecision] + N[(N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -1.72e-9], t$95$0, If[LessEqual[phi1, 3.7e-18], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$0]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -1.72 \cdot 10^{-9}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_1 \leq 3.7 \cdot 10^{-18}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if phi1 < -1.72000000000000006e-9 or 3.7000000000000003e-18 < phi1 Initial program 84.5%
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lower-fma.f6484.5
lift-*.f64N/A
*-commutativeN/A
lower-*.f6484.5
Applied egg-rr84.5%
if -1.72000000000000006e-9 < phi1 < 3.7000000000000003e-18Initial program 69.2%
Applied egg-rr89.0%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6489.0
Simplified89.0%
Final simplification86.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (sin phi1) (sin phi2))) (t_1 (* (cos phi1) (cos phi2))))
(*
R_s
(if (<= lambda2 -6.7e-6)
(*
R_m
(acos
(*
(cos phi1)
(fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))))))
(if (<= lambda2 9e-5)
(* R_m (acos (fma (cos lambda1) t_1 t_0)))
(* R_m (acos (fma (cos lambda2) t_1 t_0))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = sin(phi1) * sin(phi2);
double t_1 = cos(phi1) * cos(phi2);
double tmp;
if (lambda2 <= -6.7e-6) {
tmp = R_m * acos((cos(phi1) * fma(cos(lambda2), cos(lambda1), (sin(lambda2) * sin(lambda1)))));
} else if (lambda2 <= 9e-5) {
tmp = R_m * acos(fma(cos(lambda1), t_1, t_0));
} else {
tmp = R_m * acos(fma(cos(lambda2), t_1, t_0));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(sin(phi1) * sin(phi2)) t_1 = Float64(cos(phi1) * cos(phi2)) tmp = 0.0 if (lambda2 <= -6.7e-6) tmp = Float64(R_m * acos(Float64(cos(phi1) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda2) * sin(lambda1)))))); elseif (lambda2 <= 9e-5) tmp = Float64(R_m * acos(fma(cos(lambda1), t_1, t_0))); else tmp = Float64(R_m * acos(fma(cos(lambda2), t_1, t_0))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[lambda2, -6.7e-6], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[lambda2, 9e-5], N[(R$95$m * N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * t$95$1 + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[lambda2], $MachinePrecision] * t$95$1 + t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \sin \phi_1 \cdot \sin \phi_2\\
t_1 := \cos \phi_1 \cdot \cos \phi_2\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_2 \leq -6.7 \cdot 10^{-6}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)\\
\mathbf{elif}\;\lambda_2 \leq 9 \cdot 10^{-5}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, t\_1, t\_0\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_2, t\_1, t\_0\right)\right)\\
\end{array}
\end{array}
\end{array}
if lambda2 < -6.7e-6Initial program 62.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6438.8
Simplified38.8%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
lower-fma.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
lower-*.f6459.1
Applied egg-rr59.1%
if -6.7e-6 < lambda2 < 9.00000000000000057e-5Initial program 90.3%
Taylor expanded in lambda2 around 0
lower-fma.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6490.4
Simplified90.4%
if 9.00000000000000057e-5 < lambda2 Initial program 58.7%
Taylor expanded in lambda1 around 0
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
cos-negN/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6459.0
Simplified59.0%
Final simplification76.5%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0
(*
R_m
(acos
(fma
(cos lambda1)
(* (cos phi1) (cos phi2))
(* (sin phi1) (sin phi2)))))))
(*
R_s
(if (<= phi1 -6.2e-6)
t_0
(if (<= phi1 3.7e-18)
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))))))
t_0)))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R_m * acos(fma(cos(lambda1), (cos(phi1) * cos(phi2)), (sin(phi1) * sin(phi2))));
double tmp;
if (phi1 <= -6.2e-6) {
tmp = t_0;
} else if (phi1 <= 3.7e-18) {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
} else {
tmp = t_0;
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(R_m * acos(fma(cos(lambda1), Float64(cos(phi1) * cos(phi2)), Float64(sin(phi1) * sin(phi2))))) tmp = 0.0 if (phi1 <= -6.2e-6) tmp = t_0; elseif (phi1 <= 3.7e-18) tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); else tmp = t_0; end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(R$95$m * N[ArcCos[N[(N[Cos[lambda1], $MachinePrecision] * N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi1, -6.2e-6], t$95$0, If[LessEqual[phi1, 3.7e-18], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$0]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -6.2 \cdot 10^{-6}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_1 \leq 3.7 \cdot 10^{-18}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if phi1 < -6.1999999999999999e-6 or 3.7000000000000003e-18 < phi1 Initial program 84.3%
Taylor expanded in lambda2 around 0
lower-fma.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6466.4
Simplified66.4%
if -6.1999999999999999e-6 < phi1 < 3.7000000000000003e-18Initial program 69.7%
Applied egg-rr89.2%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6488.6
Simplified88.6%
Final simplification76.9%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi2 6.5e-6)
(*
R_m
(acos
(*
(cos phi1)
(fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))))))
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 6.5e-6) {
tmp = R_m * acos((cos(phi1) * fma(cos(lambda2), cos(lambda1), (sin(lambda2) * sin(lambda1)))));
} else {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 6.5e-6) tmp = Float64(R_m * acos(Float64(cos(phi1) * fma(cos(lambda2), cos(lambda1), Float64(sin(lambda2) * sin(lambda1)))))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi2, 6.5e-6], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[lambda2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision] + N[(N[Sin[lambda2], $MachinePrecision] * N[Sin[lambda1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq 6.5 \cdot 10^{-6}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\end{array}
\end{array}
if phi2 < 6.4999999999999996e-6Initial program 77.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6451.2
Simplified51.2%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
lower-fma.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
lower-*.f6461.8
Applied egg-rr61.8%
if 6.4999999999999996e-6 < phi2 Initial program 77.0%
Applied egg-rr99.3%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6458.9
Simplified58.9%
Final simplification61.1%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -0.00011)
(* R_m (acos (* (cos phi1) (cos (- lambda2 lambda1)))))
(*
R_m
(acos
(*
(cos phi2)
(fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -0.00011) {
tmp = R_m * acos((cos(phi1) * cos((lambda2 - lambda1))));
} else {
tmp = R_m * acos((cos(phi2) * fma(sin(lambda1), sin(lambda2), (cos(lambda1) * cos(lambda2)))));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -0.00011) tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * fma(sin(lambda1), sin(lambda2), Float64(cos(lambda1) * cos(lambda2)))))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -0.00011], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[(N[Sin[lambda1], $MachinePrecision] * N[Sin[lambda2], $MachinePrecision] + N[(N[Cos[lambda1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -0.00011:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\\
\end{array}
\end{array}
if phi1 < -1.10000000000000004e-4Initial program 85.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6447.5
Simplified47.5%
if -1.10000000000000004e-4 < phi1 Initial program 74.7%
Applied egg-rr92.9%
Taylor expanded in phi1 around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-sin.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6462.8
Simplified62.8%
Final simplification59.1%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda2 lambda1))))
(*
R_s
(if (<= phi2 -1.25e-5)
(*
R_m
(acos
(*
lambda2
(fma
(cos phi1)
(/ (cos phi2) lambda2)
(* (sin phi1) (/ (sin phi2) lambda2))))))
(if (<= phi2 0.00065)
(* R_m (acos (fma t_0 (cos phi1) (* (sin phi1) phi2))))
(if (<= phi2 1.5e+67)
(* R_m (acos (fma (cos phi1) (cos phi2) (* (sin phi1) (sin phi2)))))
(* R_m (acos (* (cos phi2) t_0)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda2 - lambda1));
double tmp;
if (phi2 <= -1.25e-5) {
tmp = R_m * acos((lambda2 * fma(cos(phi1), (cos(phi2) / lambda2), (sin(phi1) * (sin(phi2) / lambda2)))));
} else if (phi2 <= 0.00065) {
tmp = R_m * acos(fma(t_0, cos(phi1), (sin(phi1) * phi2)));
} else if (phi2 <= 1.5e+67) {
tmp = R_m * acos(fma(cos(phi1), cos(phi2), (sin(phi1) * sin(phi2))));
} else {
tmp = R_m * acos((cos(phi2) * t_0));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda2 - lambda1)) tmp = 0.0 if (phi2 <= -1.25e-5) tmp = Float64(R_m * acos(Float64(lambda2 * fma(cos(phi1), Float64(cos(phi2) / lambda2), Float64(sin(phi1) * Float64(sin(phi2) / lambda2)))))); elseif (phi2 <= 0.00065) tmp = Float64(R_m * acos(fma(t_0, cos(phi1), Float64(sin(phi1) * phi2)))); elseif (phi2 <= 1.5e+67) tmp = Float64(R_m * acos(fma(cos(phi1), cos(phi2), Float64(sin(phi1) * sin(phi2))))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * t_0))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi2, -1.25e-5], N[(R$95$m * N[ArcCos[N[(lambda2 * N[(N[Cos[phi1], $MachinePrecision] * N[(N[Cos[phi2], $MachinePrecision] / lambda2), $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[(N[Sin[phi2], $MachinePrecision] / lambda2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 0.00065], N[(R$95$m * N[ArcCos[N[(t$95$0 * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.5e+67], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq -1.25 \cdot 10^{-5}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\lambda_2 \cdot \mathsf{fma}\left(\cos \phi_1, \frac{\cos \phi_2}{\lambda_2}, \sin \phi_1 \cdot \frac{\sin \phi_2}{\lambda_2}\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 0.00065:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(t\_0, \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.5 \cdot 10^{+67}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot t\_0\right)\\
\end{array}
\end{array}
\end{array}
if phi2 < -1.25000000000000006e-5Initial program 86.6%
Taylor expanded in lambda2 around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-fma.f64N/A
Simplified60.6%
Taylor expanded in lambda2 around inf
lower-*.f64N/A
+-commutativeN/A
associate-+l+N/A
associate-/l*N/A
lower-fma.f64N/A
lower-cos.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-/.f64N/A
lower-cos.f64N/A
Simplified60.4%
Taylor expanded in lambda1 around 0
lower-*.f64N/A
associate-/l*N/A
lower-fma.f64N/A
lower-cos.f64N/A
lower-/.f64N/A
lower-cos.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-/.f64N/A
lower-sin.f6447.4
Simplified47.4%
if -1.25000000000000006e-5 < phi2 < 6.4999999999999997e-4Initial program 71.9%
Taylor expanded in phi2 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f6471.9
Simplified71.9%
if 6.4999999999999997e-4 < phi2 < 1.50000000000000005e67Initial program 78.3%
Taylor expanded in lambda2 around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-fma.f64N/A
Simplified47.3%
Taylor expanded in lambda1 around 0
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6448.8
Simplified48.8%
if 1.50000000000000005e67 < phi2 Initial program 76.7%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6450.4
Simplified50.4%
Final simplification59.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0
(* R_m (acos (fma (cos phi1) (cos phi2) (* (sin phi1) (sin phi2))))))
(t_1 (cos (- lambda2 lambda1))))
(*
R_s
(if (<= phi2 -1.25e-5)
t_0
(if (<= phi2 0.00065)
(* R_m (acos (fma t_1 (cos phi1) (* (sin phi1) phi2))))
(if (<= phi2 1.5e+67) t_0 (* R_m (acos (* (cos phi2) t_1)))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R_m * acos(fma(cos(phi1), cos(phi2), (sin(phi1) * sin(phi2))));
double t_1 = cos((lambda2 - lambda1));
double tmp;
if (phi2 <= -1.25e-5) {
tmp = t_0;
} else if (phi2 <= 0.00065) {
tmp = R_m * acos(fma(t_1, cos(phi1), (sin(phi1) * phi2)));
} else if (phi2 <= 1.5e+67) {
tmp = t_0;
} else {
tmp = R_m * acos((cos(phi2) * t_1));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = Float64(R_m * acos(fma(cos(phi1), cos(phi2), Float64(sin(phi1) * sin(phi2))))) t_1 = cos(Float64(lambda2 - lambda1)) tmp = 0.0 if (phi2 <= -1.25e-5) tmp = t_0; elseif (phi2 <= 0.00065) tmp = Float64(R_m * acos(fma(t_1, cos(phi1), Float64(sin(phi1) * phi2)))); elseif (phi2 <= 1.5e+67) tmp = t_0; else tmp = Float64(R_m * acos(Float64(cos(phi2) * t_1))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[phi2], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * N[Sin[phi2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi2, -1.25e-5], t$95$0, If[LessEqual[phi2, 0.00065], N[(R$95$m * N[ArcCos[N[(t$95$1 * N[Cos[phi1], $MachinePrecision] + N[(N[Sin[phi1], $MachinePrecision] * phi2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 1.5e+67], t$95$0, N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * t$95$1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right)\\
t_1 := \cos \left(\lambda_2 - \lambda_1\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq -1.25 \cdot 10^{-5}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\phi_2 \leq 0.00065:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\mathsf{fma}\left(t\_1, \cos \phi_1, \sin \phi_1 \cdot \phi_2\right)\right)\\
\mathbf{elif}\;\phi_2 \leq 1.5 \cdot 10^{+67}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot t\_1\right)\\
\end{array}
\end{array}
\end{array}
if phi2 < -1.25000000000000006e-5 or 6.4999999999999997e-4 < phi2 < 1.50000000000000005e67Initial program 85.3%
Taylor expanded in lambda2 around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-fma.f64N/A
Simplified58.5%
Taylor expanded in lambda1 around 0
lower-fma.f64N/A
lower-cos.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
lower-sin.f6447.7
Simplified47.7%
if -1.25000000000000006e-5 < phi2 < 6.4999999999999997e-4Initial program 71.9%
Taylor expanded in phi2 around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sin.f6471.9
Simplified71.9%
if 1.50000000000000005e67 < phi2 Initial program 76.7%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6450.4
Simplified50.4%
Final simplification59.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda1 lambda2))))
(*
R_s
(if (<= t_0 0.999999)
(* R_m (acos t_0))
(*
R_m
(acos (* (cos phi1) (fma lambda2 (fma lambda2 -0.5 lambda1) 1.0))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda1 - lambda2));
double tmp;
if (t_0 <= 0.999999) {
tmp = R_m * acos(t_0);
} else {
tmp = R_m * acos((cos(phi1) * fma(lambda2, fma(lambda2, -0.5, lambda1), 1.0)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda1 - lambda2)) tmp = 0.0 if (t_0 <= 0.999999) tmp = Float64(R_m * acos(t_0)); else tmp = Float64(R_m * acos(Float64(cos(phi1) * fma(lambda2, fma(lambda2, -0.5, lambda1), 1.0)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]}, N[(R$95$s * If[LessEqual[t$95$0, 0.999999], N[(R$95$m * N[ArcCos[t$95$0], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[(lambda2 * N[(lambda2 * -0.5 + lambda1), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_1 - \lambda_2\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_0 \leq 0.999999:\\
\;\;\;\;R\_m \cdot \cos^{-1} t\_0\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \mathsf{fma}\left(\lambda_2, \mathsf{fma}\left(\lambda_2, -0.5, \lambda_1\right), 1\right)\right)\\
\end{array}
\end{array}
\end{array}
if (cos.f64 (-.f64 lambda1 lambda2)) < 0.999998999999999971Initial program 74.9%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6446.0
Simplified46.0%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6432.8
Simplified32.8%
if 0.999998999999999971 < (cos.f64 (-.f64 lambda1 lambda2)) Initial program 83.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6435.6
Simplified35.6%
Taylor expanded in lambda1 around 0
+-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-cos.f6435.5
Simplified35.5%
Taylor expanded in lambda2 around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6435.5
Simplified35.5%
Final simplification33.6%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -0.002)
(* R_m (acos (* (cos phi1) (cos lambda1))))
(if (<= phi1 -5.2e-109)
(* R_m (acos (* (cos (- lambda1 lambda2)) (fma (* phi1 phi1) -0.5 1.0))))
(* R_m (acos (* (cos phi2) (cos lambda1))))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -0.002) {
tmp = R_m * acos((cos(phi1) * cos(lambda1)));
} else if (phi1 <= -5.2e-109) {
tmp = R_m * acos((cos((lambda1 - lambda2)) * fma((phi1 * phi1), -0.5, 1.0)));
} else {
tmp = R_m * acos((cos(phi2) * cos(lambda1)));
}
return R_s * tmp;
}
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -0.002) tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(lambda1)))); elseif (phi1 <= -5.2e-109) tmp = Float64(R_m * acos(Float64(cos(Float64(lambda1 - lambda2)) * fma(Float64(phi1 * phi1), -0.5, 1.0)))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * cos(lambda1)))); end return Float64(R_s * tmp) end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -0.002], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[phi1, -5.2e-109], N[(R$95$m * N[ArcCos[N[(N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision] * N[(N[(phi1 * phi1), $MachinePrecision] * -0.5 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -0.002:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
\mathbf{elif}\;\phi_1 \leq -5.2 \cdot 10^{-109}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \left(\lambda_1 - \lambda_2\right) \cdot \mathsf{fma}\left(\phi_1 \cdot \phi_1, -0.5, 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
\end{array}
\end{array}
if phi1 < -2e-3Initial program 85.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6447.5
Simplified47.5%
Taylor expanded in lambda2 around 0
cos-negN/A
lower-cos.f6443.6
Simplified43.6%
if -2e-3 < phi1 < -5.1999999999999997e-109Initial program 84.1%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6452.4
Simplified52.4%
Taylor expanded in phi1 around 0
associate-*r*N/A
distribute-rgt1-inN/A
+-commutativeN/A
sub-negN/A
neg-mul-1N/A
cos-negN/A
neg-mul-1N/A
+-commutativeN/A
distribute-neg-inN/A
remove-double-negN/A
sub-negN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
sub-negN/A
neg-mul-1N/A
lower-cos.f64N/A
neg-mul-1N/A
Simplified52.4%
if -5.1999999999999997e-109 < phi1 Initial program 73.6%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6473.6
Applied egg-rr73.6%
Taylor expanded in lambda2 around 0
lower-cos.f6455.8
Simplified55.8%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6436.2
Simplified36.2%
Final simplification39.3%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (cos (- lambda2 lambda1))))
(*
R_s
(if (<= phi2 1e-5)
(* R_m (acos (* (cos phi1) t_0)))
(* R_m (acos (* (cos phi2) t_0)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = cos((lambda2 - lambda1));
double tmp;
if (phi2 <= 1e-5) {
tmp = R_m * acos((cos(phi1) * t_0));
} else {
tmp = R_m * acos((cos(phi2) * t_0));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = cos((lambda2 - lambda1))
if (phi2 <= 1d-5) then
tmp = r_m * acos((cos(phi1) * t_0))
else
tmp = r_m * acos((cos(phi2) * t_0))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = Math.cos((lambda2 - lambda1));
double tmp;
if (phi2 <= 1e-5) {
tmp = R_m * Math.acos((Math.cos(phi1) * t_0));
} else {
tmp = R_m * Math.acos((Math.cos(phi2) * t_0));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): t_0 = math.cos((lambda2 - lambda1)) tmp = 0 if phi2 <= 1e-5: tmp = R_m * math.acos((math.cos(phi1) * t_0)) else: tmp = R_m * math.acos((math.cos(phi2) * t_0)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) t_0 = cos(Float64(lambda2 - lambda1)) tmp = 0.0 if (phi2 <= 1e-5) tmp = Float64(R_m * acos(Float64(cos(phi1) * t_0))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * t_0))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
t_0 = cos((lambda2 - lambda1));
tmp = 0.0;
if (phi2 <= 1e-5)
tmp = R_m * acos((cos(phi1) * t_0));
else
tmp = R_m * acos((cos(phi2) * t_0));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]}, N[(R$95$s * If[LessEqual[phi2, 1e-5], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
\begin{array}{l}
t_0 := \cos \left(\lambda_2 - \lambda_1\right)\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq 10^{-5}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot t\_0\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot t\_0\right)\\
\end{array}
\end{array}
\end{array}
if phi2 < 1.00000000000000008e-5Initial program 77.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6451.2
Simplified51.2%
if 1.00000000000000008e-5 < phi2 Initial program 77.0%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6446.1
Simplified46.1%
Final simplification49.9%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi2 1.3e-5)
(* R_m (acos (* (cos phi1) (cos (- lambda2 lambda1)))))
(* R_m (acos (* (cos phi2) (cos lambda1)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 1.3e-5) {
tmp = R_m * acos((cos(phi1) * cos((lambda2 - lambda1))));
} else {
tmp = R_m * acos((cos(phi2) * cos(lambda1)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi2 <= 1.3d-5) then
tmp = r_m * acos((cos(phi1) * cos((lambda2 - lambda1))))
else
tmp = r_m * acos((cos(phi2) * cos(lambda1)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi2 <= 1.3e-5) {
tmp = R_m * Math.acos((Math.cos(phi1) * Math.cos((lambda2 - lambda1))));
} else {
tmp = R_m * Math.acos((Math.cos(phi2) * Math.cos(lambda1)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi2 <= 1.3e-5: tmp = R_m * math.acos((math.cos(phi1) * math.cos((lambda2 - lambda1)))) else: tmp = R_m * math.acos((math.cos(phi2) * math.cos(lambda1))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi2 <= 1.3e-5) tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(Float64(lambda2 - lambda1))))); else tmp = Float64(R_m * acos(Float64(cos(phi2) * cos(lambda1)))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi2 <= 1.3e-5)
tmp = R_m * acos((cos(phi1) * cos((lambda2 - lambda1))));
else
tmp = R_m * acos((cos(phi2) * cos(lambda1)));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi2, 1.3e-5], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[N[(lambda2 - lambda1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi2], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_2 \leq 1.3 \cdot 10^{-5}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \left(\lambda_2 - \lambda_1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_2 \cdot \cos \lambda_1\right)\\
\end{array}
\end{array}
if phi2 < 1.29999999999999992e-5Initial program 77.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6451.2
Simplified51.2%
if 1.29999999999999992e-5 < phi2 Initial program 77.0%
lift-sin.f64N/A
lift-sin.f64N/A
lift-*.f64N/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6477.1
Applied egg-rr77.1%
Taylor expanded in lambda2 around 0
lower-cos.f6458.8
Simplified58.8%
Taylor expanded in phi1 around 0
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
lower-cos.f6439.5
Simplified39.5%
Final simplification48.2%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda1 -1.05e-42)
(* R_m (acos (* (cos phi1) (cos lambda1))))
(* R_m (acos (* (cos phi1) (cos lambda2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.05e-42) {
tmp = R_m * acos((cos(phi1) * cos(lambda1)));
} else {
tmp = R_m * acos((cos(phi1) * cos(lambda2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda1 <= (-1.05d-42)) then
tmp = r_m * acos((cos(phi1) * cos(lambda1)))
else
tmp = r_m * acos((cos(phi1) * cos(lambda2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -1.05e-42) {
tmp = R_m * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
} else {
tmp = R_m * Math.acos((Math.cos(phi1) * Math.cos(lambda2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -1.05e-42: tmp = R_m * math.acos((math.cos(phi1) * math.cos(lambda1))) else: tmp = R_m * math.acos((math.cos(phi1) * math.cos(lambda2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -1.05e-42) tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(lambda1)))); else tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(lambda2)))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda1 <= -1.05e-42)
tmp = R_m * acos((cos(phi1) * cos(lambda1)));
else
tmp = R_m * acos((cos(phi1) * cos(lambda2)));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -1.05e-42], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda2], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -1.05 \cdot 10^{-42}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_2\right)\\
\end{array}
\end{array}
if lambda1 < -1.05000000000000003e-42Initial program 66.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6436.6
Simplified36.6%
Taylor expanded in lambda2 around 0
cos-negN/A
lower-cos.f6436.9
Simplified36.9%
if -1.05000000000000003e-42 < lambda1 Initial program 81.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6445.5
Simplified45.5%
Taylor expanded in lambda1 around 0
lower-cos.f6435.7
Simplified35.7%
Final simplification36.0%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -3.8e-8)
(* R_m (acos (* (cos phi1) (cos lambda1))))
(* R_m (acos (cos (- lambda1 lambda2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -3.8e-8) {
tmp = R_m * acos((cos(phi1) * cos(lambda1)));
} else {
tmp = R_m * acos(cos((lambda1 - lambda2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi1 <= (-3.8d-8)) then
tmp = r_m * acos((cos(phi1) * cos(lambda1)))
else
tmp = r_m * acos(cos((lambda1 - lambda2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -3.8e-8) {
tmp = R_m * Math.acos((Math.cos(phi1) * Math.cos(lambda1)));
} else {
tmp = R_m * Math.acos(Math.cos((lambda1 - lambda2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -3.8e-8: tmp = R_m * math.acos((math.cos(phi1) * math.cos(lambda1))) else: tmp = R_m * math.acos(math.cos((lambda1 - lambda2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -3.8e-8) tmp = Float64(R_m * acos(Float64(cos(phi1) * cos(lambda1)))); else tmp = Float64(R_m * acos(cos(Float64(lambda1 - lambda2)))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi1 <= -3.8e-8)
tmp = R_m * acos((cos(phi1) * cos(lambda1)));
else
tmp = R_m * acos(cos((lambda1 - lambda2)));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -3.8e-8], N[(R$95$m * N[ArcCos[N[(N[Cos[phi1], $MachinePrecision] * N[Cos[lambda1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -3.8 \cdot 10^{-8}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \left(\cos \phi_1 \cdot \cos \lambda_1\right)\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if phi1 < -3.80000000000000028e-8Initial program 86.2%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6447.9
Simplified47.9%
Taylor expanded in lambda2 around 0
cos-negN/A
lower-cos.f6444.1
Simplified44.1%
if -3.80000000000000028e-8 < phi1 Initial program 74.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6441.3
Simplified41.3%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6427.6
Simplified27.6%
Final simplification31.7%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda2 -1.9e-299)
(* R_m (acos (cos lambda1)))
(if (<= lambda2 4.5e-7)
(* R_m (acos (cos phi1)))
(* R_m (acos (cos lambda2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= -1.9e-299) {
tmp = R_m * acos(cos(lambda1));
} else if (lambda2 <= 4.5e-7) {
tmp = R_m * acos(cos(phi1));
} else {
tmp = R_m * acos(cos(lambda2));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda2 <= (-1.9d-299)) then
tmp = r_m * acos(cos(lambda1))
else if (lambda2 <= 4.5d-7) then
tmp = r_m * acos(cos(phi1))
else
tmp = r_m * acos(cos(lambda2))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= -1.9e-299) {
tmp = R_m * Math.acos(Math.cos(lambda1));
} else if (lambda2 <= 4.5e-7) {
tmp = R_m * Math.acos(Math.cos(phi1));
} else {
tmp = R_m * Math.acos(Math.cos(lambda2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= -1.9e-299: tmp = R_m * math.acos(math.cos(lambda1)) elif lambda2 <= 4.5e-7: tmp = R_m * math.acos(math.cos(phi1)) else: tmp = R_m * math.acos(math.cos(lambda2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= -1.9e-299) tmp = Float64(R_m * acos(cos(lambda1))); elseif (lambda2 <= 4.5e-7) tmp = Float64(R_m * acos(cos(phi1))); else tmp = Float64(R_m * acos(cos(lambda2))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda2 <= -1.9e-299)
tmp = R_m * acos(cos(lambda1));
elseif (lambda2 <= 4.5e-7)
tmp = R_m * acos(cos(phi1));
else
tmp = R_m * acos(cos(lambda2));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda2, -1.9e-299], N[(R$95$m * N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[lambda2, 4.5e-7], N[(R$95$m * N[ArcCos[N[Cos[phi1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_2 \leq -1.9 \cdot 10^{-299}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \lambda_1\\
\mathbf{elif}\;\lambda_2 \leq 4.5 \cdot 10^{-7}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \phi_1\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \lambda_2\\
\end{array}
\end{array}
if lambda2 < -1.9000000000000001e-299Initial program 76.1%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6443.2
Simplified43.2%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6427.4
Simplified27.4%
Taylor expanded in lambda2 around 0
lower-cos.f6418.1
Simplified18.1%
if -1.9000000000000001e-299 < lambda2 < 4.4999999999999998e-7Initial program 91.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6448.3
Simplified48.3%
Taylor expanded in lambda1 around 0
+-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-cos.f6422.0
Simplified22.0%
Taylor expanded in lambda2 around 0
lower-cos.f6425.6
Simplified25.6%
if 4.4999999999999998e-7 < lambda2 Initial program 58.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6433.8
Simplified33.8%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.9
Simplified24.9%
Taylor expanded in lambda1 around 0
cos-negN/A
lower-cos.f6424.7
Simplified24.7%
Final simplification21.5%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= phi1 -0.00045)
(* R_m (acos (cos phi1)))
(* R_m (acos (cos (- lambda1 lambda2)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -0.00045) {
tmp = R_m * acos(cos(phi1));
} else {
tmp = R_m * acos(cos((lambda1 - lambda2)));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (phi1 <= (-0.00045d0)) then
tmp = r_m * acos(cos(phi1))
else
tmp = r_m * acos(cos((lambda1 - lambda2)))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (phi1 <= -0.00045) {
tmp = R_m * Math.acos(Math.cos(phi1));
} else {
tmp = R_m * Math.acos(Math.cos((lambda1 - lambda2)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if phi1 <= -0.00045: tmp = R_m * math.acos(math.cos(phi1)) else: tmp = R_m * math.acos(math.cos((lambda1 - lambda2))) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (phi1 <= -0.00045) tmp = Float64(R_m * acos(cos(phi1))); else tmp = Float64(R_m * acos(cos(Float64(lambda1 - lambda2)))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (phi1 <= -0.00045)
tmp = R_m * acos(cos(phi1));
else
tmp = R_m * acos(cos((lambda1 - lambda2)));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[phi1, -0.00045], N[(R$95$m * N[ArcCos[N[Cos[phi1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[Cos[N[(lambda1 - lambda2), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\phi_1 \leq -0.00045:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \phi_1\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if phi1 < -4.4999999999999999e-4Initial program 85.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6447.5
Simplified47.5%
Taylor expanded in lambda1 around 0
+-commutativeN/A
lower-fma.f64N/A
lower-sin.f64N/A
lower-cos.f6426.9
Simplified26.9%
Taylor expanded in lambda2 around 0
lower-cos.f6430.1
Simplified30.1%
if -4.4999999999999999e-4 < phi1 Initial program 74.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6441.5
Simplified41.5%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6427.9
Simplified27.9%
Final simplification28.4%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda2 9e-5)
(* R_m (acos (cos lambda1)))
(* R_m (acos (cos lambda2))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 9e-5) {
tmp = R_m * acos(cos(lambda1));
} else {
tmp = R_m * acos(cos(lambda2));
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda2 <= 9d-5) then
tmp = r_m * acos(cos(lambda1))
else
tmp = r_m * acos(cos(lambda2))
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda2 <= 9e-5) {
tmp = R_m * Math.acos(Math.cos(lambda1));
} else {
tmp = R_m * Math.acos(Math.cos(lambda2));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda2 <= 9e-5: tmp = R_m * math.acos(math.cos(lambda1)) else: tmp = R_m * math.acos(math.cos(lambda2)) return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda2 <= 9e-5) tmp = Float64(R_m * acos(cos(lambda1))); else tmp = Float64(R_m * acos(cos(lambda2))); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda2 <= 9e-5)
tmp = R_m * acos(cos(lambda1));
else
tmp = R_m * acos(cos(lambda2));
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda2, 9e-5], N[(R$95$m * N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[ArcCos[N[Cos[lambda2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_2 \leq 9 \cdot 10^{-5}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \lambda_1\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \lambda_2\\
\end{array}
\end{array}
if lambda2 < 9.00000000000000057e-5Initial program 81.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6445.0
Simplified45.0%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.8
Simplified24.8%
Taylor expanded in lambda2 around 0
lower-cos.f6418.8
Simplified18.8%
if 9.00000000000000057e-5 < lambda2 Initial program 58.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6433.8
Simplified33.8%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.9
Simplified24.9%
Taylor expanded in lambda1 around 0
cos-negN/A
lower-cos.f6424.7
Simplified24.7%
Final simplification19.9%
R\_m = (fabs.f64 R)
R\_s = (copysign.f64 #s(literal 1 binary64) R)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
(FPCore (R_s R_m lambda1 lambda2 phi1 phi2)
:precision binary64
(*
R_s
(if (<= lambda1 -6200000000.0)
(* R_m (acos (cos lambda1)))
(* R_m (fabs (remainder (- lambda2 lambda1) (* PI 2.0)))))))R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -6200000000.0) {
tmp = R_m * acos(cos(lambda1));
} else {
tmp = R_m * fabs(remainder((lambda2 - lambda1), (((double) M_PI) * 2.0)));
}
return R_s * tmp;
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -6200000000.0) {
tmp = R_m * Math.acos(Math.cos(lambda1));
} else {
tmp = R_m * Math.abs(Math.IEEEremainder((lambda2 - lambda1), (Math.PI * 2.0)));
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -6200000000.0: tmp = R_m * math.acos(math.cos(lambda1)) else: tmp = R_m * math.fabs(math.remainder((lambda2 - lambda1), (math.pi * 2.0))) return R_s * tmp
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -6200000000.0], N[(R$95$m * N[ArcCos[N[Cos[lambda1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R$95$m * N[Abs[N[With[{TMP1 = N[(lambda2 - lambda1), $MachinePrecision], TMP2 = N[(Pi * 2.0), $MachinePrecision]}, TMP1 - Round[TMP1 / TMP2] * TMP2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -6200000000:\\
\;\;\;\;R\_m \cdot \cos^{-1} \cos \lambda_1\\
\mathbf{else}:\\
\;\;\;\;R\_m \cdot \left|\left(\left(\lambda_2 - \lambda_1\right) \mathsf{rem} \left(\pi \cdot 2\right)\right)\right|\\
\end{array}
\end{array}
if lambda1 < -6.2e9Initial program 64.7%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6438.4
Simplified38.4%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6430.6
Simplified30.6%
Taylor expanded in lambda2 around 0
lower-cos.f6430.8
Simplified30.8%
if -6.2e9 < lambda1 Initial program 81.5%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6444.4
Simplified44.4%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6422.9
Simplified22.9%
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
acos-cosN/A
lower-fabs.f64N/A
lower-remainder.f64N/A
Applied egg-rr18.6%
Final simplification21.6%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* R_m (fabs (remainder (- lambda2 lambda1) (* PI 2.0))))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * fabs(remainder((lambda2 - lambda1), (((double) M_PI) * 2.0))));
}
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * Math.abs(Math.IEEEremainder((lambda2 - lambda1), (Math.PI * 2.0))));
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (R_m * math.fabs(math.remainder((lambda2 - lambda1), (math.pi * 2.0))))
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(R$95$m * N[Abs[N[With[{TMP1 = N[(lambda2 - lambda1), $MachinePrecision], TMP2 = N[(Pi * 2.0), $MachinePrecision]}, TMP1 - Round[TMP1 / TMP2] * TMP2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \left(R\_m \cdot \left|\left(\left(\lambda_2 - \lambda_1\right) \mathsf{rem} \left(\pi \cdot 2\right)\right)\right|\right)
\end{array}
Initial program 77.4%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.9
Simplified42.9%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.8
Simplified24.8%
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
acos-cosN/A
lower-fabs.f64N/A
lower-remainder.f64N/A
Applied egg-rr18.9%
Final simplification18.9%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (if (<= lambda1 -3e-172) (* lambda1 (- R_m)) (* lambda2 R_m))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -3e-172) {
tmp = lambda1 * -R_m;
} else {
tmp = lambda2 * R_m;
}
return R_s * tmp;
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if (lambda1 <= (-3d-172)) then
tmp = lambda1 * -r_m
else
tmp = lambda2 * r_m
end if
code = r_s * tmp
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if (lambda1 <= -3e-172) {
tmp = lambda1 * -R_m;
} else {
tmp = lambda2 * R_m;
}
return R_s * tmp;
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): tmp = 0 if lambda1 <= -3e-172: tmp = lambda1 * -R_m else: tmp = lambda2 * R_m return R_s * tmp
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (lambda1 <= -3e-172) tmp = Float64(lambda1 * Float64(-R_m)); else tmp = Float64(lambda2 * R_m); end return Float64(R_s * tmp) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp_2 = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = 0.0;
if (lambda1 <= -3e-172)
tmp = lambda1 * -R_m;
else
tmp = lambda2 * R_m;
end
tmp_2 = R_s * tmp;
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * If[LessEqual[lambda1, -3e-172], N[(lambda1 * (-R$95$m)), $MachinePrecision], N[(lambda2 * R$95$m), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \begin{array}{l}
\mathbf{if}\;\lambda_1 \leq -3 \cdot 10^{-172}:\\
\;\;\;\;\lambda_1 \cdot \left(-R\_m\right)\\
\mathbf{else}:\\
\;\;\;\;\lambda_2 \cdot R\_m\\
\end{array}
\end{array}
if lambda1 < -2.99999999999999984e-172Initial program 73.8%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.7
Simplified42.7%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6427.2
Simplified27.2%
flip--N/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
difference-of-squaresN/A
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f6427.1
lift-acos.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
Applied egg-rr9.6%
Taylor expanded in lambda2 around 0
neg-mul-1N/A
lower-neg.f648.9
Simplified8.9%
if -2.99999999999999984e-172 < lambda1 Initial program 79.9%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6443.1
Simplified43.1%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6423.2
Simplified23.2%
flip--N/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
difference-of-squaresN/A
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f6423.2
lift-acos.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
Applied egg-rr12.0%
Taylor expanded in lambda2 around inf
*-commutativeN/A
lower-*.f645.6
Simplified5.6%
Final simplification6.9%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* R_m (- lambda2 lambda1))))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * (lambda2 - lambda1));
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r_s * (r_m * (lambda2 - lambda1))
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (R_m * (lambda2 - lambda1));
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (R_m * (lambda2 - lambda1))
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(R_m * Float64(lambda2 - lambda1))) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = R_s * (R_m * (lambda2 - lambda1));
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(R$95$m * N[(lambda2 - lambda1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \left(R\_m \cdot \left(\lambda_2 - \lambda_1\right)\right)
\end{array}
Initial program 77.4%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.9
Simplified42.9%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.8
Simplified24.8%
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
cos-diffN/A
acos-cos-sN/A
lower--.f645.9
Applied egg-rr5.9%
Final simplification5.9%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* lambda2 R_m)))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (lambda2 * R_m);
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r_s * (lambda2 * r_m)
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (lambda2 * R_m);
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (lambda2 * R_m)
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(lambda2 * R_m)) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = R_s * (lambda2 * R_m);
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(lambda2 * R$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \left(\lambda_2 \cdot R\_m\right)
\end{array}
Initial program 77.4%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.9
Simplified42.9%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.8
Simplified24.8%
flip--N/A
clear-numN/A
lower-/.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
difference-of-squaresN/A
lift--.f64N/A
acos-cos-sN/A
lift-cos.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f6424.8
lift-acos.f64N/A
lift-cos.f64N/A
lift--.f64N/A
cos-diffN/A
lift-cos.f64N/A
lift-cos.f64N/A
*-commutativeN/A
lift-cos.f64N/A
lift-cos.f64N/A
lift-sin.f64N/A
lift-sin.f64N/A
*-commutativeN/A
lift-sin.f64N/A
lift-sin.f64N/A
Applied egg-rr11.0%
Taylor expanded in lambda2 around inf
*-commutativeN/A
lower-*.f644.9
Simplified4.9%
R\_m = (fabs.f64 R) R\_s = (copysign.f64 #s(literal 1 binary64) R) NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function. (FPCore (R_s R_m lambda1 lambda2 phi1 phi2) :precision binary64 (* R_s (* lambda1 R_m)))
R\_m = fabs(R);
R\_s = copysign(1.0, R);
assert(R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2);
double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (lambda1 * R_m);
}
R\_m = abs(r)
R\_s = copysign(1.0d0, r)
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
real(8) function code(r_s, r_m, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r_s
real(8), intent (in) :: r_m
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r_s * (lambda1 * r_m)
end function
R\_m = Math.abs(R);
R\_s = Math.copySign(1.0, R);
assert R_m < lambda1 && lambda1 < lambda2 && lambda2 < phi1 && phi1 < phi2;
public static double code(double R_s, double R_m, double lambda1, double lambda2, double phi1, double phi2) {
return R_s * (lambda1 * R_m);
}
R\_m = math.fabs(R) R\_s = math.copysign(1.0, R) [R_m, lambda1, lambda2, phi1, phi2] = sort([R_m, lambda1, lambda2, phi1, phi2]) def code(R_s, R_m, lambda1, lambda2, phi1, phi2): return R_s * (lambda1 * R_m)
R\_m = abs(R) R\_s = copysign(1.0, R) R_m, lambda1, lambda2, phi1, phi2 = sort([R_m, lambda1, lambda2, phi1, phi2]) function code(R_s, R_m, lambda1, lambda2, phi1, phi2) return Float64(R_s * Float64(lambda1 * R_m)) end
R\_m = abs(R);
R\_s = sign(R) * abs(1.0);
R_m, lambda1, lambda2, phi1, phi2 = num2cell(sort([R_m, lambda1, lambda2, phi1, phi2])){:}
function tmp = code(R_s, R_m, lambda1, lambda2, phi1, phi2)
tmp = R_s * (lambda1 * R_m);
end
R\_m = N[Abs[R], $MachinePrecision]
R\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[R]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: R_m, lambda1, lambda2, phi1, and phi2 should be sorted in increasing order before calling this function.
code[R$95$s_, R$95$m_, lambda1_, lambda2_, phi1_, phi2_] := N[(R$95$s * N[(lambda1 * R$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
R\_m = \left|R\right|
\\
R\_s = \mathsf{copysign}\left(1, R\right)
\\
[R_m, lambda1, lambda2, phi1, phi2] = \mathsf{sort}([R_m, lambda1, lambda2, phi1, phi2])\\
\\
R\_s \cdot \left(\lambda_1 \cdot R\_m\right)
\end{array}
Initial program 77.4%
Taylor expanded in phi2 around 0
*-commutativeN/A
lower-*.f64N/A
sub-negN/A
remove-double-negN/A
mul-1-negN/A
distribute-neg-inN/A
+-commutativeN/A
cos-negN/A
lower-cos.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-cos.f6442.9
Simplified42.9%
Taylor expanded in phi1 around 0
sub-negN/A
remove-double-negN/A
distribute-neg-inN/A
+-commutativeN/A
neg-mul-1N/A
cos-negN/A
lower-cos.f64N/A
neg-mul-1N/A
sub-negN/A
lower--.f6424.8
Simplified24.8%
Taylor expanded in lambda1 around inf
*-commutativeN/A
lower-*.f645.0
Simplified5.0%
herbie shell --seed 2024221
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))