
(FPCore (J K U) :precision binary64 (let* ((t_0 (cos (/ K 2.0)))) (* (* (* -2.0 J) t_0) (sqrt (+ 1.0 (pow (/ U (* (* 2.0 J) t_0)) 2.0))))))
double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
return ((-2.0 * J) * t_0) * sqrt((1.0 + pow((U / ((2.0 * J) * t_0)), 2.0)));
}
real(8) function code(j, k, u)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u
real(8) :: t_0
t_0 = cos((k / 2.0d0))
code = (((-2.0d0) * j) * t_0) * sqrt((1.0d0 + ((u / ((2.0d0 * j) * t_0)) ** 2.0d0)))
end function
public static double code(double J, double K, double U) {
double t_0 = Math.cos((K / 2.0));
return ((-2.0 * J) * t_0) * Math.sqrt((1.0 + Math.pow((U / ((2.0 * J) * t_0)), 2.0)));
}
def code(J, K, U): t_0 = math.cos((K / 2.0)) return ((-2.0 * J) * t_0) * math.sqrt((1.0 + math.pow((U / ((2.0 * J) * t_0)), 2.0)))
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) return Float64(Float64(Float64(-2.0 * J) * t_0) * sqrt(Float64(1.0 + (Float64(U / Float64(Float64(2.0 * J) * t_0)) ^ 2.0)))) end
function tmp = code(J, K, U) t_0 = cos((K / 2.0)); tmp = ((-2.0 * J) * t_0) * sqrt((1.0 + ((U / ((2.0 * J) * t_0)) ^ 2.0))); end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[(N[(-2.0 * J), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U / N[(N[(2.0 * J), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\left(\left(-2 \cdot J\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{U}{\left(2 \cdot J\right) \cdot t\_0}\right)}^{2}}
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 17 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (J K U) :precision binary64 (let* ((t_0 (cos (/ K 2.0)))) (* (* (* -2.0 J) t_0) (sqrt (+ 1.0 (pow (/ U (* (* 2.0 J) t_0)) 2.0))))))
double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
return ((-2.0 * J) * t_0) * sqrt((1.0 + pow((U / ((2.0 * J) * t_0)), 2.0)));
}
real(8) function code(j, k, u)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u
real(8) :: t_0
t_0 = cos((k / 2.0d0))
code = (((-2.0d0) * j) * t_0) * sqrt((1.0d0 + ((u / ((2.0d0 * j) * t_0)) ** 2.0d0)))
end function
public static double code(double J, double K, double U) {
double t_0 = Math.cos((K / 2.0));
return ((-2.0 * J) * t_0) * Math.sqrt((1.0 + Math.pow((U / ((2.0 * J) * t_0)), 2.0)));
}
def code(J, K, U): t_0 = math.cos((K / 2.0)) return ((-2.0 * J) * t_0) * math.sqrt((1.0 + math.pow((U / ((2.0 * J) * t_0)), 2.0)))
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) return Float64(Float64(Float64(-2.0 * J) * t_0) * sqrt(Float64(1.0 + (Float64(U / Float64(Float64(2.0 * J) * t_0)) ^ 2.0)))) end
function tmp = code(J, K, U) t_0 = cos((K / 2.0)); tmp = ((-2.0 * J) * t_0) * sqrt((1.0 + ((U / ((2.0 * J) * t_0)) ^ 2.0))); end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[(N[(-2.0 * J), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U / N[(N[(2.0 * J), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\left(\left(-2 \cdot J\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{U}{\left(2 \cdot J\right) \cdot t\_0}\right)}^{2}}
\end{array}
\end{array}
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 (- INFINITY)) (- U_m) (if (<= t_1 2e+301) t_1 U_m))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_1 <= 2e+301) {
tmp = t_1;
} else {
tmp = U_m;
}
return tmp;
}
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * Math.sqrt((1.0 + Math.pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -Double.POSITIVE_INFINITY) {
tmp = -U_m;
} else if (t_1 <= 2e+301) {
tmp = t_1;
} else {
tmp = U_m;
}
return tmp;
}
U_m = math.fabs(U) def code(J, K, U_m): t_0 = math.cos((K / 2.0)) t_1 = (t_0 * (-2.0 * J)) * math.sqrt((1.0 + math.pow((U_m / (t_0 * (J * 2.0))), 2.0))) tmp = 0 if t_1 <= -math.inf: tmp = -U_m elif t_1 <= 2e+301: tmp = t_1 else: tmp = U_m return tmp
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_1 <= 2e+301) tmp = t_1; else tmp = U_m; end return tmp end
U_m = abs(U); function tmp_2 = code(J, K, U_m) t_0 = cos((K / 2.0)); t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + ((U_m / (t_0 * (J * 2.0))) ^ 2.0))); tmp = 0.0; if (t_1 <= -Inf) tmp = -U_m; elseif (t_1 <= 2e+301) tmp = t_1; else tmp = U_m; end tmp_2 = tmp; end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, (-Infinity)], (-U$95$m), If[LessEqual[t$95$1, 2e+301], t$95$1, U$95$m]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -inf.0Initial program 6.1%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6451.6
Simplified51.6%
if -inf.0 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification85.9%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1 (* t_0 (* -2.0 J)))
(t_2 (* t_1 (sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0)))))
(t_3 (* (* -2.0 J) (sqrt (fma (/ (* U_m 0.25) J) (/ U_m J) 1.0)))))
(if (<= t_2 (- INFINITY))
(- U_m)
(if (<= t_2 -5e+218)
t_3
(if (<= t_2 -5e-9)
(* t_1 (sqrt (fma 0.25 (/ (* U_m U_m) (* J J)) 1.0)))
(if (<= t_2 -1e-191)
t_3
(if (<= t_2 2e+301) (* (cos (* K 0.5)) (* -2.0 J)) U_m)))))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = t_0 * (-2.0 * J);
double t_2 = t_1 * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double t_3 = (-2.0 * J) * sqrt(fma(((U_m * 0.25) / J), (U_m / J), 1.0));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_2 <= -5e+218) {
tmp = t_3;
} else if (t_2 <= -5e-9) {
tmp = t_1 * sqrt(fma(0.25, ((U_m * U_m) / (J * J)), 1.0));
} else if (t_2 <= -1e-191) {
tmp = t_3;
} else if (t_2 <= 2e+301) {
tmp = cos((K * 0.5)) * (-2.0 * J);
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(t_0 * Float64(-2.0 * J)) t_2 = Float64(t_1 * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) t_3 = Float64(Float64(-2.0 * J) * sqrt(fma(Float64(Float64(U_m * 0.25) / J), Float64(U_m / J), 1.0))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_2 <= -5e+218) tmp = t_3; elseif (t_2 <= -5e-9) tmp = Float64(t_1 * sqrt(fma(0.25, Float64(Float64(U_m * U_m) / Float64(J * J)), 1.0))); elseif (t_2 <= -1e-191) tmp = t_3; elseif (t_2 <= 2e+301) tmp = Float64(cos(Float64(K * 0.5)) * Float64(-2.0 * J)); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(-2.0 * J), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m * 0.25), $MachinePrecision] / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, (-Infinity)], (-U$95$m), If[LessEqual[t$95$2, -5e+218], t$95$3, If[LessEqual[t$95$2, -5e-9], N[(t$95$1 * N[Sqrt[N[(0.25 * N[(N[(U$95$m * U$95$m), $MachinePrecision] / N[(J * J), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, -1e-191], t$95$3, If[LessEqual[t$95$2, 2e+301], N[(N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision] * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision], U$95$m]]]]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := t\_0 \cdot \left(-2 \cdot J\right)\\
t_2 := t\_1 \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_3 := \left(-2 \cdot J\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m \cdot 0.25}{J}, \frac{U\_m}{J}, 1\right)}\\
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq -5 \cdot 10^{+218}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq -5 \cdot 10^{-9}:\\
\;\;\;\;t\_1 \cdot \sqrt{\mathsf{fma}\left(0.25, \frac{U\_m \cdot U\_m}{J \cdot J}, 1\right)}\\
\mathbf{elif}\;t\_2 \leq -1 \cdot 10^{-191}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;\cos \left(K \cdot 0.5\right) \cdot \left(-2 \cdot J\right)\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -inf.0Initial program 6.1%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6451.6
Simplified51.6%
if -inf.0 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -4.99999999999999983e218 or -5.0000000000000001e-9 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1e-191Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.5%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6446.0
Simplified46.0%
frac-timesN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f6472.7
Applied egg-rr72.7%
if -4.99999999999999983e218 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -5.0000000000000001e-9Initial program 99.9%
Taylor expanded in K around 0
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6491.6
Simplified91.6%
if -1e-191 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
Taylor expanded in J around inf
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6466.9
Simplified66.9%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification68.1%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0)))))
(t_2 (* (cos (* K 0.5)) (* -2.0 J))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -4e+166)
(fma (* U_m -0.25) (/ U_m J) t_2)
(if (<= t_1 -1e-191)
(* (* -2.0 J) (sqrt (fma (/ (* U_m 0.25) J) (/ U_m J) 1.0)))
(if (<= t_1 2e+301) t_2 U_m))))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double t_2 = cos((K * 0.5)) * (-2.0 * J);
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -4e+166) {
tmp = fma((U_m * -0.25), (U_m / J), t_2);
} else if (t_1 <= -1e-191) {
tmp = (-2.0 * J) * sqrt(fma(((U_m * 0.25) / J), (U_m / J), 1.0));
} else if (t_1 <= 2e+301) {
tmp = t_2;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) t_2 = Float64(cos(Float64(K * 0.5)) * Float64(-2.0 * J)) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -4e+166) tmp = fma(Float64(U_m * -0.25), Float64(U_m / J), t_2); elseif (t_1 <= -1e-191) tmp = Float64(Float64(-2.0 * J) * sqrt(fma(Float64(Float64(U_m * 0.25) / J), Float64(U_m / J), 1.0))); elseif (t_1 <= 2e+301) tmp = t_2; else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision] * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -4e+166], N[(N[(U$95$m * -0.25), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision] + t$95$2), $MachinePrecision], If[LessEqual[t$95$1, -1e-191], N[(N[(-2.0 * J), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m * 0.25), $MachinePrecision] / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+301], t$95$2, U$95$m]]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_2 := \cos \left(K \cdot 0.5\right) \cdot \left(-2 \cdot J\right)\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -4 \cdot 10^{+166}:\\
\;\;\;\;\mathsf{fma}\left(U\_m \cdot -0.25, \frac{U\_m}{J}, t\_2\right)\\
\mathbf{elif}\;t\_1 \leq -1 \cdot 10^{-191}:\\
\;\;\;\;\left(-2 \cdot J\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m \cdot 0.25}{J}, \frac{U\_m}{J}, 1\right)}\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -3.99999999999999976e166Initial program 99.9%
Taylor expanded in U around 0
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
associate-*r/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6474.7
Simplified74.7%
+-commutativeN/A
associate-*r*N/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
cos-lowering-cos.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
associate-*r*N/A
metadata-evalN/A
distribute-lft-neg-inN/A
*-commutativeN/A
*-commutativeN/A
*-lowering-*.f64N/A
Applied egg-rr83.5%
Taylor expanded in K around 0
/-lowering-/.f6482.9
Simplified82.9%
if -3.99999999999999976e166 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1e-191Initial program 99.9%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.4%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6458.4
Simplified58.4%
frac-timesN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f6468.4
Applied egg-rr68.4%
if -1e-191 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
Taylor expanded in J around inf
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6466.9
Simplified66.9%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification65.9%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0)))))
(t_2 (* (cos (* K 0.5)) (* -2.0 J))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -4e+166)
t_2
(if (<= t_1 -1e-191)
(* (* -2.0 J) (sqrt (fma (/ (* U_m 0.25) J) (/ U_m J) 1.0)))
(if (<= t_1 2e+301) t_2 U_m))))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double t_2 = cos((K * 0.5)) * (-2.0 * J);
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -4e+166) {
tmp = t_2;
} else if (t_1 <= -1e-191) {
tmp = (-2.0 * J) * sqrt(fma(((U_m * 0.25) / J), (U_m / J), 1.0));
} else if (t_1 <= 2e+301) {
tmp = t_2;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) t_2 = Float64(cos(Float64(K * 0.5)) * Float64(-2.0 * J)) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -4e+166) tmp = t_2; elseif (t_1 <= -1e-191) tmp = Float64(Float64(-2.0 * J) * sqrt(fma(Float64(Float64(U_m * 0.25) / J), Float64(U_m / J), 1.0))); elseif (t_1 <= 2e+301) tmp = t_2; else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision] * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -4e+166], t$95$2, If[LessEqual[t$95$1, -1e-191], N[(N[(-2.0 * J), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m * 0.25), $MachinePrecision] / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+301], t$95$2, U$95$m]]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_2 := \cos \left(K \cdot 0.5\right) \cdot \left(-2 \cdot J\right)\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -4 \cdot 10^{+166}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq -1 \cdot 10^{-191}:\\
\;\;\;\;\left(-2 \cdot J\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m \cdot 0.25}{J}, \frac{U\_m}{J}, 1\right)}\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -3.99999999999999976e166 or -1e-191 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
Taylor expanded in J around inf
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6471.1
Simplified71.1%
if -3.99999999999999976e166 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1e-191Initial program 99.9%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.4%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6458.4
Simplified58.4%
frac-timesN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f6468.4
Applied egg-rr68.4%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification65.9%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -1e+165)
(fma U_m (/ (* U_m -0.25) J) (* -2.0 J))
(if (<= t_1 -2e-82)
(* (* -2.0 J) (sqrt (fma 0.25 (/ (* U_m U_m) (* J J)) 1.0)))
(if (<= t_1 -2e-299) (- (* -2.0 (/ (* J J) U_m)) U_m) U_m))))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -1e+165) {
tmp = fma(U_m, ((U_m * -0.25) / J), (-2.0 * J));
} else if (t_1 <= -2e-82) {
tmp = (-2.0 * J) * sqrt(fma(0.25, ((U_m * U_m) / (J * J)), 1.0));
} else if (t_1 <= -2e-299) {
tmp = (-2.0 * ((J * J) / U_m)) - U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -1e+165) tmp = fma(U_m, Float64(Float64(U_m * -0.25) / J), Float64(-2.0 * J)); elseif (t_1 <= -2e-82) tmp = Float64(Float64(-2.0 * J) * sqrt(fma(0.25, Float64(Float64(U_m * U_m) / Float64(J * J)), 1.0))); elseif (t_1 <= -2e-299) tmp = Float64(Float64(-2.0 * Float64(Float64(J * J) / U_m)) - U_m); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -1e+165], N[(U$95$m * N[(N[(U$95$m * -0.25), $MachinePrecision] / J), $MachinePrecision] + N[(-2.0 * J), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-82], N[(N[(-2.0 * J), $MachinePrecision] * N[Sqrt[N[(0.25 * N[(N[(U$95$m * U$95$m), $MachinePrecision] / N[(J * J), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-299], N[(N[(-2.0 * N[(N[(J * J), $MachinePrecision] / U$95$m), $MachinePrecision]), $MachinePrecision] - U$95$m), $MachinePrecision], U$95$m]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -1 \cdot 10^{+165}:\\
\;\;\;\;\mathsf{fma}\left(U\_m, \frac{U\_m \cdot -0.25}{J}, -2 \cdot J\right)\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-82}:\\
\;\;\;\;\left(-2 \cdot J\right) \cdot \sqrt{\mathsf{fma}\left(0.25, \frac{U\_m \cdot U\_m}{J \cdot J}, 1\right)}\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-299}:\\
\;\;\;\;-2 \cdot \frac{J \cdot J}{U\_m} - U\_m\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -9.99999999999999899e164Initial program 99.9%
Taylor expanded in U around 0
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
associate-*r/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6474.7
Simplified74.7%
Taylor expanded in K around 0
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*r/N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6449.4
Simplified49.4%
+-commutativeN/A
associate-*l*N/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6452.9
Applied egg-rr52.9%
if -9.99999999999999899e164 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -2e-82Initial program 99.9%
Taylor expanded in K around 0
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f6469.2
Simplified69.2%
if -2e-82 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.5%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6424.3
Simplified24.3%
Taylor expanded in J around 0
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6424.6
Simplified24.6%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification42.8%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (/ U_m (fma J (cos K) J)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(* t_1 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_1 (* J 2.0))) 2.0)))))
(t_3 (* -2.0 (* J (cos (* K 0.5))))))
(if (<= t_2 -1e+301)
(- U_m)
(if (<= t_2 -1e-37)
(* t_3 (sqrt (+ 1.0 (* U_m (* (/ 0.5 J) t_0)))))
(if (<= t_2 2e+301)
(* t_3 (sqrt (fma (/ 0.5 J) (* U_m t_0) 1.0)))
U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = U_m / fma(J, cos(K), J);
double t_1 = cos((K / 2.0));
double t_2 = (t_1 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_1 * (J * 2.0))), 2.0)));
double t_3 = -2.0 * (J * cos((K * 0.5)));
double tmp;
if (t_2 <= -1e+301) {
tmp = -U_m;
} else if (t_2 <= -1e-37) {
tmp = t_3 * sqrt((1.0 + (U_m * ((0.5 / J) * t_0))));
} else if (t_2 <= 2e+301) {
tmp = t_3 * sqrt(fma((0.5 / J), (U_m * t_0), 1.0));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = Float64(U_m / fma(J, cos(K), J)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(Float64(t_1 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_1 * Float64(J * 2.0))) ^ 2.0)))) t_3 = Float64(-2.0 * Float64(J * cos(Float64(K * 0.5)))) tmp = 0.0 if (t_2 <= -1e+301) tmp = Float64(-U_m); elseif (t_2 <= -1e-37) tmp = Float64(t_3 * sqrt(Float64(1.0 + Float64(U_m * Float64(Float64(0.5 / J) * t_0))))); elseif (t_2 <= 2e+301) tmp = Float64(t_3 * sqrt(fma(Float64(0.5 / J), Float64(U_m * t_0), 1.0))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[(U$95$m / N[(J * N[Cos[K], $MachinePrecision] + J), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(t$95$1 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$1 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(-2.0 * N[(J * N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e+301], (-U$95$m), If[LessEqual[t$95$2, -1e-37], N[(t$95$3 * N[Sqrt[N[(1.0 + N[(U$95$m * N[(N[(0.5 / J), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 2e+301], N[(t$95$3 * N[Sqrt[N[(N[(0.5 / J), $MachinePrecision] * N[(U$95$m * t$95$0), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \frac{U\_m}{\mathsf{fma}\left(J, \cos K, J\right)}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \left(t\_1 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_1 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_3 := -2 \cdot \left(J \cdot \cos \left(K \cdot 0.5\right)\right)\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq -1 \cdot 10^{-37}:\\
\;\;\;\;t\_3 \cdot \sqrt{1 + U\_m \cdot \left(\frac{0.5}{J} \cdot t\_0\right)}\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;t\_3 \cdot \sqrt{\mathsf{fma}\left(\frac{0.5}{J}, U\_m \cdot t\_0, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000007e-37Initial program 99.9%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.5%
div-invN/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
associate-*l*N/A
metadata-evalN/A
Applied egg-rr99.5%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6499.5
Applied egg-rr99.5%
if -1.00000000000000007e-37 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.7%
div-invN/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
associate-*l*N/A
metadata-evalN/A
Applied egg-rr94.6%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6494.6
Applied egg-rr94.6%
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
cos-lowering-cos.f6495.6
Applied egg-rr95.6%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification83.9%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0)))))
(t_2 (cos (* K 0.5))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 5e-96)
(* (* -2.0 (* J t_2)) (sqrt (fma (* (/ U_m J) (/ U_m J)) 0.25 1.0)))
(if (<= t_1 2e+301)
(*
(* t_2 (* -2.0 J))
(sqrt (fma U_m (/ U_m (* (* J 2.0) (fma J (cos K) J))) 1.0)))
U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double t_2 = cos((K * 0.5));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= 5e-96) {
tmp = (-2.0 * (J * t_2)) * sqrt(fma(((U_m / J) * (U_m / J)), 0.25, 1.0));
} else if (t_1 <= 2e+301) {
tmp = (t_2 * (-2.0 * J)) * sqrt(fma(U_m, (U_m / ((J * 2.0) * fma(J, cos(K), J))), 1.0));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) t_2 = cos(Float64(K * 0.5)) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= 5e-96) tmp = Float64(Float64(-2.0 * Float64(J * t_2)) * sqrt(fma(Float64(Float64(U_m / J) * Float64(U_m / J)), 0.25, 1.0))); elseif (t_1 <= 2e+301) tmp = Float64(Float64(t_2 * Float64(-2.0 * J)) * sqrt(fma(U_m, Float64(U_m / Float64(Float64(J * 2.0) * fma(J, cos(K), J))), 1.0))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, 5e-96], N[(N[(-2.0 * N[(J * t$95$2), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+301], N[(N[(t$95$2 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(U$95$m * N[(U$95$m / N[(N[(J * 2.0), $MachinePrecision] * N[(J * N[Cos[K], $MachinePrecision] + J), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_2 := \cos \left(K \cdot 0.5\right)\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-96}:\\
\;\;\;\;\left(-2 \cdot \left(J \cdot t\_2\right)\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m}{J} \cdot \frac{U\_m}{J}, 0.25, 1\right)}\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;\left(t\_2 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{\mathsf{fma}\left(U\_m, \frac{U\_m}{\left(J \cdot 2\right) \cdot \mathsf{fma}\left(J, \cos K, J\right)}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 4.99999999999999995e-96Initial program 99.9%
Taylor expanded in K around 0
Simplified85.8%
*-rgt-identityN/A
unpow-prod-downN/A
metadata-evalN/A
*-rgt-identityN/A
+-commutativeN/A
div-invN/A
*-rgt-identityN/A
*-commutativeN/A
div-invN/A
associate-/r*N/A
div-invN/A
metadata-evalN/A
unpow-prod-downN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr85.8%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6485.8
Applied egg-rr85.8%
if 4.99999999999999995e-96 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.7%
div-invN/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
associate-*l*N/A
metadata-evalN/A
Applied egg-rr98.4%
*-commutativeN/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr91.3%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification78.0%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0)))))
(t_2 (cos (* K 0.5))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 5e-96)
(* (* -2.0 (* J t_2)) (sqrt (fma (* (/ U_m J) (/ U_m J)) 0.25 1.0)))
(if (<= t_1 2e+301)
(*
J
(*
(sqrt (fma U_m (/ U_m (* (* J 2.0) (fma J (cos K) J))) 1.0))
(* -2.0 t_2)))
U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double t_2 = cos((K * 0.5));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= 5e-96) {
tmp = (-2.0 * (J * t_2)) * sqrt(fma(((U_m / J) * (U_m / J)), 0.25, 1.0));
} else if (t_1 <= 2e+301) {
tmp = J * (sqrt(fma(U_m, (U_m / ((J * 2.0) * fma(J, cos(K), J))), 1.0)) * (-2.0 * t_2));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) t_2 = cos(Float64(K * 0.5)) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= 5e-96) tmp = Float64(Float64(-2.0 * Float64(J * t_2)) * sqrt(fma(Float64(Float64(U_m / J) * Float64(U_m / J)), 0.25, 1.0))); elseif (t_1 <= 2e+301) tmp = Float64(J * Float64(sqrt(fma(U_m, Float64(U_m / Float64(Float64(J * 2.0) * fma(J, cos(K), J))), 1.0)) * Float64(-2.0 * t_2))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, 5e-96], N[(N[(-2.0 * N[(J * t$95$2), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+301], N[(J * N[(N[Sqrt[N[(U$95$m * N[(U$95$m / N[(N[(J * 2.0), $MachinePrecision] * N[(J * N[Cos[K], $MachinePrecision] + J), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(-2.0 * t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], U$95$m]]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
t_2 := \cos \left(K \cdot 0.5\right)\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-96}:\\
\;\;\;\;\left(-2 \cdot \left(J \cdot t\_2\right)\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m}{J} \cdot \frac{U\_m}{J}, 0.25, 1\right)}\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;J \cdot \left(\sqrt{\mathsf{fma}\left(U\_m, \frac{U\_m}{\left(J \cdot 2\right) \cdot \mathsf{fma}\left(J, \cos K, J\right)}, 1\right)} \cdot \left(-2 \cdot t\_2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 4.99999999999999995e-96Initial program 99.9%
Taylor expanded in K around 0
Simplified85.8%
*-rgt-identityN/A
unpow-prod-downN/A
metadata-evalN/A
*-rgt-identityN/A
+-commutativeN/A
div-invN/A
*-rgt-identityN/A
*-commutativeN/A
div-invN/A
associate-/r*N/A
div-invN/A
metadata-evalN/A
unpow-prod-downN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr85.8%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6485.8
Applied egg-rr85.8%
if 4.99999999999999995e-96 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.7%
Applied egg-rr91.3%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification78.0%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -5e-34)
(fma U_m (/ (* U_m -0.25) J) (* -2.0 J))
(if (<= t_1 -2e-299) (- (* -2.0 (/ (* J J) U_m)) U_m) U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -5e-34) {
tmp = fma(U_m, ((U_m * -0.25) / J), (-2.0 * J));
} else if (t_1 <= -2e-299) {
tmp = (-2.0 * ((J * J) / U_m)) - U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -5e-34) tmp = fma(U_m, Float64(Float64(U_m * -0.25) / J), Float64(-2.0 * J)); elseif (t_1 <= -2e-299) tmp = Float64(Float64(-2.0 * Float64(Float64(J * J) / U_m)) - U_m); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -5e-34], N[(U$95$m * N[(N[(U$95$m * -0.25), $MachinePrecision] / J), $MachinePrecision] + N[(-2.0 * J), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-299], N[(N[(-2.0 * N[(N[(J * J), $MachinePrecision] / U$95$m), $MachinePrecision]), $MachinePrecision] - U$95$m), $MachinePrecision], U$95$m]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-34}:\\
\;\;\;\;\mathsf{fma}\left(U\_m, \frac{U\_m \cdot -0.25}{J}, -2 \cdot J\right)\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-299}:\\
\;\;\;\;-2 \cdot \frac{J \cdot J}{U\_m} - U\_m\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -5.0000000000000003e-34Initial program 99.9%
Taylor expanded in U around 0
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
associate-*r/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6474.7
Simplified74.7%
Taylor expanded in K around 0
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*r/N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.8
Simplified50.8%
+-commutativeN/A
associate-*l*N/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6452.7
Applied egg-rr52.7%
if -5.0000000000000003e-34 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.6%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6432.6
Simplified32.6%
Taylor expanded in J around 0
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6420.0
Simplified20.0%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification39.7%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -5e-34)
(* -2.0 J)
(if (<= t_1 -2e-299) (- (* -2.0 (/ (* J J) U_m)) U_m) U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -5e-34) {
tmp = -2.0 * J;
} else if (t_1 <= -2e-299) {
tmp = (-2.0 * ((J * J) / U_m)) - U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(u)
real(8) function code(j, k, u_m)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u_m
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = cos((k / 2.0d0))
t_1 = (t_0 * ((-2.0d0) * j)) * sqrt((1.0d0 + ((u_m / (t_0 * (j * 2.0d0))) ** 2.0d0)))
if (t_1 <= (-1d+301)) then
tmp = -u_m
else if (t_1 <= (-5d-34)) then
tmp = (-2.0d0) * j
else if (t_1 <= (-2d-299)) then
tmp = ((-2.0d0) * ((j * j) / u_m)) - u_m
else
tmp = u_m
end if
code = tmp
end function
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * Math.sqrt((1.0 + Math.pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -5e-34) {
tmp = -2.0 * J;
} else if (t_1 <= -2e-299) {
tmp = (-2.0 * ((J * J) / U_m)) - U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = math.fabs(U) def code(J, K, U_m): t_0 = math.cos((K / 2.0)) t_1 = (t_0 * (-2.0 * J)) * math.sqrt((1.0 + math.pow((U_m / (t_0 * (J * 2.0))), 2.0))) tmp = 0 if t_1 <= -1e+301: tmp = -U_m elif t_1 <= -5e-34: tmp = -2.0 * J elif t_1 <= -2e-299: tmp = (-2.0 * ((J * J) / U_m)) - U_m else: tmp = U_m return tmp
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -5e-34) tmp = Float64(-2.0 * J); elseif (t_1 <= -2e-299) tmp = Float64(Float64(-2.0 * Float64(Float64(J * J) / U_m)) - U_m); else tmp = U_m; end return tmp end
U_m = abs(U); function tmp_2 = code(J, K, U_m) t_0 = cos((K / 2.0)); t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + ((U_m / (t_0 * (J * 2.0))) ^ 2.0))); tmp = 0.0; if (t_1 <= -1e+301) tmp = -U_m; elseif (t_1 <= -5e-34) tmp = -2.0 * J; elseif (t_1 <= -2e-299) tmp = (-2.0 * ((J * J) / U_m)) - U_m; else tmp = U_m; end tmp_2 = tmp; end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -5e-34], N[(-2.0 * J), $MachinePrecision], If[LessEqual[t$95$1, -2e-299], N[(N[(-2.0 * N[(N[(J * J), $MachinePrecision] / U$95$m), $MachinePrecision]), $MachinePrecision] - U$95$m), $MachinePrecision], U$95$m]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-34}:\\
\;\;\;\;-2 \cdot J\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-299}:\\
\;\;\;\;-2 \cdot \frac{J \cdot J}{U\_m} - U\_m\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -5.0000000000000003e-34Initial program 99.9%
Taylor expanded in J around inf
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6479.0
Simplified79.0%
Taylor expanded in K around 0
*-commutativeN/A
*-lowering-*.f6452.2
Simplified52.2%
if -5.0000000000000003e-34 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.6%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6432.6
Simplified32.6%
Taylor expanded in J around 0
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6420.0
Simplified20.0%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification39.6%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 -5e-34) (* -2.0 J) (if (<= t_1 -2e-299) (- U_m) U_m)))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -5e-34) {
tmp = -2.0 * J;
} else if (t_1 <= -2e-299) {
tmp = -U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(u)
real(8) function code(j, k, u_m)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u_m
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = cos((k / 2.0d0))
t_1 = (t_0 * ((-2.0d0) * j)) * sqrt((1.0d0 + ((u_m / (t_0 * (j * 2.0d0))) ** 2.0d0)))
if (t_1 <= (-1d+301)) then
tmp = -u_m
else if (t_1 <= (-5d-34)) then
tmp = (-2.0d0) * j
else if (t_1 <= (-2d-299)) then
tmp = -u_m
else
tmp = u_m
end if
code = tmp
end function
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * Math.sqrt((1.0 + Math.pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= -5e-34) {
tmp = -2.0 * J;
} else if (t_1 <= -2e-299) {
tmp = -U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = math.fabs(U) def code(J, K, U_m): t_0 = math.cos((K / 2.0)) t_1 = (t_0 * (-2.0 * J)) * math.sqrt((1.0 + math.pow((U_m / (t_0 * (J * 2.0))), 2.0))) tmp = 0 if t_1 <= -1e+301: tmp = -U_m elif t_1 <= -5e-34: tmp = -2.0 * J elif t_1 <= -2e-299: tmp = -U_m else: tmp = U_m return tmp
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= -5e-34) tmp = Float64(-2.0 * J); elseif (t_1 <= -2e-299) tmp = Float64(-U_m); else tmp = U_m; end return tmp end
U_m = abs(U); function tmp_2 = code(J, K, U_m) t_0 = cos((K / 2.0)); t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + ((U_m / (t_0 * (J * 2.0))) ^ 2.0))); tmp = 0.0; if (t_1 <= -1e+301) tmp = -U_m; elseif (t_1 <= -5e-34) tmp = -2.0 * J; elseif (t_1 <= -2e-299) tmp = -U_m; else tmp = U_m; end tmp_2 = tmp; end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, -5e-34], N[(-2.0 * J), $MachinePrecision], If[LessEqual[t$95$1, -2e-299], (-U$95$m), U$95$m]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-34}:\\
\;\;\;\;-2 \cdot J\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-299}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301 or -5.0000000000000003e-34 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 43.3%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6440.5
Simplified40.5%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -5.0000000000000003e-34Initial program 99.9%
Taylor expanded in J around inf
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6479.0
Simplified79.0%
Taylor expanded in K around 0
*-commutativeN/A
*-lowering-*.f6452.2
Simplified52.2%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification39.6%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1 (* t_0 (* -2.0 J)))
(t_2 (* t_1 (sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_2 -1e+301)
(- U_m)
(if (<= t_2 2e+301)
(*
t_1
(sqrt
(+
1.0
(*
(/ U_m (* J 2.0))
(/ U_m (* (* J 2.0) (+ 0.5 (* 0.5 (cos (* 2.0 (* K 0.5)))))))))))
U_m))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = t_0 * (-2.0 * J);
double t_2 = t_1 * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_2 <= -1e+301) {
tmp = -U_m;
} else if (t_2 <= 2e+301) {
tmp = t_1 * sqrt((1.0 + ((U_m / (J * 2.0)) * (U_m / ((J * 2.0) * (0.5 + (0.5 * cos((2.0 * (K * 0.5))))))))));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(u)
real(8) function code(j, k, u_m)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u_m
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = cos((k / 2.0d0))
t_1 = t_0 * ((-2.0d0) * j)
t_2 = t_1 * sqrt((1.0d0 + ((u_m / (t_0 * (j * 2.0d0))) ** 2.0d0)))
if (t_2 <= (-1d+301)) then
tmp = -u_m
else if (t_2 <= 2d+301) then
tmp = t_1 * sqrt((1.0d0 + ((u_m / (j * 2.0d0)) * (u_m / ((j * 2.0d0) * (0.5d0 + (0.5d0 * cos((2.0d0 * (k * 0.5d0))))))))))
else
tmp = u_m
end if
code = tmp
end function
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double t_1 = t_0 * (-2.0 * J);
double t_2 = t_1 * Math.sqrt((1.0 + Math.pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_2 <= -1e+301) {
tmp = -U_m;
} else if (t_2 <= 2e+301) {
tmp = t_1 * Math.sqrt((1.0 + ((U_m / (J * 2.0)) * (U_m / ((J * 2.0) * (0.5 + (0.5 * Math.cos((2.0 * (K * 0.5))))))))));
} else {
tmp = U_m;
}
return tmp;
}
U_m = math.fabs(U) def code(J, K, U_m): t_0 = math.cos((K / 2.0)) t_1 = t_0 * (-2.0 * J) t_2 = t_1 * math.sqrt((1.0 + math.pow((U_m / (t_0 * (J * 2.0))), 2.0))) tmp = 0 if t_2 <= -1e+301: tmp = -U_m elif t_2 <= 2e+301: tmp = t_1 * math.sqrt((1.0 + ((U_m / (J * 2.0)) * (U_m / ((J * 2.0) * (0.5 + (0.5 * math.cos((2.0 * (K * 0.5)))))))))) else: tmp = U_m return tmp
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(t_0 * Float64(-2.0 * J)) t_2 = Float64(t_1 * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_2 <= -1e+301) tmp = Float64(-U_m); elseif (t_2 <= 2e+301) tmp = Float64(t_1 * sqrt(Float64(1.0 + Float64(Float64(U_m / Float64(J * 2.0)) * Float64(U_m / Float64(Float64(J * 2.0) * Float64(0.5 + Float64(0.5 * cos(Float64(2.0 * Float64(K * 0.5))))))))))); else tmp = U_m; end return tmp end
U_m = abs(U); function tmp_2 = code(J, K, U_m) t_0 = cos((K / 2.0)); t_1 = t_0 * (-2.0 * J); t_2 = t_1 * sqrt((1.0 + ((U_m / (t_0 * (J * 2.0))) ^ 2.0))); tmp = 0.0; if (t_2 <= -1e+301) tmp = -U_m; elseif (t_2 <= 2e+301) tmp = t_1 * sqrt((1.0 + ((U_m / (J * 2.0)) * (U_m / ((J * 2.0) * (0.5 + (0.5 * cos((2.0 * (K * 0.5)))))))))); else tmp = U_m; end tmp_2 = tmp; end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e+301], (-U$95$m), If[LessEqual[t$95$2, 2e+301], N[(t$95$1 * N[Sqrt[N[(1.0 + N[(N[(U$95$m / N[(J * 2.0), $MachinePrecision]), $MachinePrecision] * N[(U$95$m / N[(N[(J * 2.0), $MachinePrecision] * N[(0.5 + N[(0.5 * N[Cos[N[(2.0 * N[(K * 0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := t\_0 \cdot \left(-2 \cdot J\right)\\
t_2 := t\_1 \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;t\_1 \cdot \sqrt{1 + \frac{U\_m}{J \cdot 2} \cdot \frac{U\_m}{\left(J \cdot 2\right) \cdot \left(0.5 + 0.5 \cdot \cos \left(2 \cdot \left(K \cdot 0.5\right)\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.6%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification85.7%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 2e+301)
(*
(* -2.0 (* J (cos (* K 0.5))))
(sqrt (fma (/ 0.5 J) (* U_m (/ U_m (fma J (cos K) J))) 1.0)))
U_m))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= 2e+301) {
tmp = (-2.0 * (J * cos((K * 0.5)))) * sqrt(fma((0.5 / J), (U_m * (U_m / fma(J, cos(K), J))), 1.0));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= 2e+301) tmp = Float64(Float64(-2.0 * Float64(J * cos(Float64(K * 0.5)))) * sqrt(fma(Float64(0.5 / J), Float64(U_m * Float64(U_m / fma(J, cos(K), J))), 1.0))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, 2e+301], N[(N[(-2.0 * N[(J * N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(N[(0.5 / J), $MachinePrecision] * N[(U$95$m * N[(U$95$m / N[(J * N[Cos[K], $MachinePrecision] + J), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;\left(-2 \cdot \left(J \cdot \cos \left(K \cdot 0.5\right)\right)\right) \cdot \sqrt{\mathsf{fma}\left(\frac{0.5}{J}, U\_m \cdot \frac{U\_m}{\mathsf{fma}\left(J, \cos K, J\right)}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.6%
div-invN/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-/r*N/A
metadata-evalN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
associate-*l*N/A
metadata-evalN/A
Applied egg-rr96.3%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6496.3
Applied egg-rr96.3%
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
cos-lowering-cos.f6496.4
Applied egg-rr96.4%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification83.6%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 -1e+301)
(- U_m)
(if (<= t_1 2e+301)
(*
(* -2.0 (* J (cos (* K 0.5))))
(sqrt (fma (* (/ U_m J) (/ U_m J)) 0.25 1.0)))
U_m))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -1e+301) {
tmp = -U_m;
} else if (t_1 <= 2e+301) {
tmp = (-2.0 * (J * cos((K * 0.5)))) * sqrt(fma(((U_m / J) * (U_m / J)), 0.25, 1.0));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= -1e+301) tmp = Float64(-U_m); elseif (t_1 <= 2e+301) tmp = Float64(Float64(-2.0 * Float64(J * cos(Float64(K * 0.5)))) * sqrt(fma(Float64(Float64(U_m / J) * Float64(U_m / J)), 0.25, 1.0))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+301], (-U$95$m), If[LessEqual[t$95$1, 2e+301], N[(N[(-2.0 * N[(J * N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+301}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+301}:\\
\;\;\;\;\left(-2 \cdot \left(J \cdot \cos \left(K \cdot 0.5\right)\right)\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m}{J} \cdot \frac{U\_m}{J}, 0.25, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.00000000000000005e301Initial program 8.7%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6453.0
Simplified53.0%
if -1.00000000000000005e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < 2.00000000000000011e301Initial program 99.8%
Taylor expanded in K around 0
Simplified87.6%
*-rgt-identityN/A
unpow-prod-downN/A
metadata-evalN/A
*-rgt-identityN/A
+-commutativeN/A
div-invN/A
*-rgt-identityN/A
*-commutativeN/A
div-invN/A
associate-/r*N/A
div-invN/A
metadata-evalN/A
unpow-prod-downN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr87.6%
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
div-invN/A
metadata-evalN/A
*-commutativeN/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f6487.6
Applied egg-rr87.6%
if 2.00000000000000011e301 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 5.8%
Taylor expanded in U around -inf
Simplified58.9%
Final simplification77.6%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))))
(if (<= t_1 (- INFINITY))
(- U_m)
(if (<= t_1 -2e-299)
(* (* -2.0 J) (sqrt (fma (/ (* U_m 0.25) J) (/ U_m J) 1.0)))
U_m))))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = (t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)));
double tmp;
if (t_1 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_1 <= -2e-299) {
tmp = (-2.0 * J) * sqrt(fma(((U_m * 0.25) / J), (U_m / J), 1.0));
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) tmp = 0.0 if (t_1 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_1 <= -2e-299) tmp = Float64(Float64(-2.0 * J) * sqrt(fma(Float64(Float64(U_m * 0.25) / J), Float64(U_m / J), 1.0))); else tmp = U_m; end return tmp end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, (-Infinity)], (-U$95$m), If[LessEqual[t$95$1, -2e-299], N[(N[(-2.0 * J), $MachinePrecision] * N[Sqrt[N[(N[(N[(U$95$m * 0.25), $MachinePrecision] / J), $MachinePrecision] * N[(U$95$m / J), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], U$95$m]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}}\\
\mathbf{if}\;t\_1 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-299}:\\
\;\;\;\;\left(-2 \cdot J\right) \cdot \sqrt{\mathsf{fma}\left(\frac{U\_m \cdot 0.25}{J}, \frac{U\_m}{J}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -inf.0Initial program 6.1%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6451.6
Simplified51.6%
if -inf.0 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 99.9%
unpow2N/A
associate-/r*N/A
frac-timesN/A
*-commutativeN/A
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqr-cos-aN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
cos-lowering-cos.f64N/A
*-lowering-*.f64N/A
Applied egg-rr99.5%
Taylor expanded in K around 0
associate-*r*N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
sqrt-lowering-sqrt.f64N/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6450.8
Simplified50.8%
frac-timesN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
/-lowering-/.f6465.6
Applied egg-rr65.6%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification46.5%
U_m = (fabs.f64 U)
(FPCore (J K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(if (<=
(*
(* t_0 (* -2.0 J))
(sqrt (+ 1.0 (pow (/ U_m (* t_0 (* J 2.0))) 2.0))))
-2e-299)
(- U_m)
U_m)))U_m = fabs(U);
double code(double J, double K, double U_m) {
double t_0 = cos((K / 2.0));
double tmp;
if (((t_0 * (-2.0 * J)) * sqrt((1.0 + pow((U_m / (t_0 * (J * 2.0))), 2.0)))) <= -2e-299) {
tmp = -U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = abs(u)
real(8) function code(j, k, u_m)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u_m
real(8) :: t_0
real(8) :: tmp
t_0 = cos((k / 2.0d0))
if (((t_0 * ((-2.0d0) * j)) * sqrt((1.0d0 + ((u_m / (t_0 * (j * 2.0d0))) ** 2.0d0)))) <= (-2d-299)) then
tmp = -u_m
else
tmp = u_m
end if
code = tmp
end function
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double tmp;
if (((t_0 * (-2.0 * J)) * Math.sqrt((1.0 + Math.pow((U_m / (t_0 * (J * 2.0))), 2.0)))) <= -2e-299) {
tmp = -U_m;
} else {
tmp = U_m;
}
return tmp;
}
U_m = math.fabs(U) def code(J, K, U_m): t_0 = math.cos((K / 2.0)) tmp = 0 if ((t_0 * (-2.0 * J)) * math.sqrt((1.0 + math.pow((U_m / (t_0 * (J * 2.0))), 2.0)))) <= -2e-299: tmp = -U_m else: tmp = U_m return tmp
U_m = abs(U) function code(J, K, U_m) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(t_0 * Float64(-2.0 * J)) * sqrt(Float64(1.0 + (Float64(U_m / Float64(t_0 * Float64(J * 2.0))) ^ 2.0)))) <= -2e-299) tmp = Float64(-U_m); else tmp = U_m; end return tmp end
U_m = abs(U); function tmp_2 = code(J, K, U_m) t_0 = cos((K / 2.0)); tmp = 0.0; if (((t_0 * (-2.0 * J)) * sqrt((1.0 + ((U_m / (t_0 * (J * 2.0))) ^ 2.0)))) <= -2e-299) tmp = -U_m; else tmp = U_m; end tmp_2 = tmp; end
U_m = N[Abs[U], $MachinePrecision]
code[J_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[N[(N[(t$95$0 * N[(-2.0 * J), $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U$95$m / N[(t$95$0 * N[(J * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-299], (-U$95$m), U$95$m]]
\begin{array}{l}
U_m = \left|U\right|
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\mathbf{if}\;\left(t\_0 \cdot \left(-2 \cdot J\right)\right) \cdot \sqrt{1 + {\left(\frac{U\_m}{t\_0 \cdot \left(J \cdot 2\right)}\right)}^{2}} \leq -2 \cdot 10^{-299}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;U\_m\\
\end{array}
\end{array}
if (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) < -1.99999999999999998e-299Initial program 72.1%
Taylor expanded in J around 0
mul-1-negN/A
neg-lowering-neg.f6424.9
Simplified24.9%
if -1.99999999999999998e-299 < (*.f64 (*.f64 (*.f64 #s(literal -2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64)))) (sqrt.f64 (+.f64 #s(literal 1 binary64) (pow.f64 (/.f64 U (*.f64 (*.f64 #s(literal 2 binary64) J) (cos.f64 (/.f64 K #s(literal 2 binary64))))) #s(literal 2 binary64))))) Initial program 68.5%
Taylor expanded in U around -inf
Simplified33.8%
Final simplification29.7%
U_m = (fabs.f64 U) (FPCore (J K U_m) :precision binary64 U_m)
U_m = fabs(U);
double code(double J, double K, double U_m) {
return U_m;
}
U_m = abs(u)
real(8) function code(j, k, u_m)
real(8), intent (in) :: j
real(8), intent (in) :: k
real(8), intent (in) :: u_m
code = u_m
end function
U_m = Math.abs(U);
public static double code(double J, double K, double U_m) {
return U_m;
}
U_m = math.fabs(U) def code(J, K, U_m): return U_m
U_m = abs(U) function code(J, K, U_m) return U_m end
U_m = abs(U); function tmp = code(J, K, U_m) tmp = U_m; end
U_m = N[Abs[U], $MachinePrecision] code[J_, K_, U$95$m_] := U$95$m
\begin{array}{l}
U_m = \left|U\right|
\\
U\_m
\end{array}
Initial program 70.1%
Taylor expanded in U around -inf
Simplified30.8%
herbie shell --seed 2024205
(FPCore (J K U)
:name "Maksimov and Kolovsky, Equation (3)"
:precision binary64
(* (* (* -2.0 J) (cos (/ K 2.0))) (sqrt (+ 1.0 (pow (/ U (* (* 2.0 J) (cos (/ K 2.0)))) 2.0)))))