
(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 16 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)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))))
(*
J_s
(if (<= t_1 (- INFINITY))
(- U_m)
(if (<= t_1 INFINITY)
t_1
(*
(fma
(* (/ (* J_m J_m) (* U_m U_m)) (pow (cos (* 0.5 K)) 2.0))
-2.0
-1.0)
(- U_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double tmp;
if (t_1 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_1;
} else {
tmp = fma((((J_m * J_m) / (U_m * U_m)) * pow(cos((0.5 * K)), 2.0)), -2.0, -1.0) * -U_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) tmp = 0.0 if (t_1 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_1 <= Inf) tmp = t_1; else tmp = Float64(fma(Float64(Float64(Float64(J_m * J_m) / Float64(U_m * U_m)) * (cos(Float64(0.5 * K)) ^ 2.0)), -2.0, -1.0) * Float64(-U_m)); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, (-Infinity)], (-U$95$m), If[LessEqual[t$95$1, Infinity], t$95$1, N[(N[(N[(N[(N[(J$95$m * J$95$m), $MachinePrecision] / N[(U$95$m * U$95$m), $MachinePrecision]), $MachinePrecision] * N[Power[N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] * -2.0 + -1.0), $MachinePrecision] * (-U$95$m)), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{J\_m \cdot J\_m}{U\_m \cdot U\_m} \cdot {\cos \left(0.5 \cdot K\right)}^{2}, -2, -1\right) \cdot \left(-U\_m\right)\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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))))) < +inf.0Initial program 83.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))))) Initial program 72.9%
Taylor expanded in U around -inf
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites23.3%
Final simplification78.8%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1 (* t_0 (* J_m -2.0)))
(t_2 (* (sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0)) t_1))
(t_3 (/ (* 0.5 U_m) (* 1.0 J_m))))
(*
J_s
(if (<= t_2 -2e+306)
(- U_m)
(if (<= t_2 -1e-8)
(* (sqrt (fma (* (/ U_m (* J_m J_m)) U_m) 0.25 1.0)) t_1)
(if (<= t_2 -2e-272)
(* (* J_m -2.0) (sqrt (fma t_3 t_3 1.0)))
(if (<= t_2 INFINITY)
(* (cos (* 0.5 K)) (* J_m -2.0))
(* (/ U_m J_m) J_m))))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = t_0 * (J_m * -2.0);
double t_2 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * t_1;
double t_3 = (0.5 * U_m) / (1.0 * J_m);
double tmp;
if (t_2 <= -2e+306) {
tmp = -U_m;
} else if (t_2 <= -1e-8) {
tmp = sqrt(fma(((U_m / (J_m * J_m)) * U_m), 0.25, 1.0)) * t_1;
} else if (t_2 <= -2e-272) {
tmp = (J_m * -2.0) * sqrt(fma(t_3, t_3, 1.0));
} else if (t_2 <= ((double) INFINITY)) {
tmp = cos((0.5 * K)) * (J_m * -2.0);
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(t_0 * Float64(J_m * -2.0)) t_2 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * t_1) t_3 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) tmp = 0.0 if (t_2 <= -2e+306) tmp = Float64(-U_m); elseif (t_2 <= -1e-8) tmp = Float64(sqrt(fma(Float64(Float64(U_m / Float64(J_m * J_m)) * U_m), 0.25, 1.0)) * t_1); elseif (t_2 <= -2e-272) tmp = Float64(Float64(J_m * -2.0) * sqrt(fma(t_3, t_3, 1.0))); elseif (t_2 <= Inf) tmp = Float64(cos(Float64(0.5 * K)) * Float64(J_m * -2.0)); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, 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[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$2, -2e+306], (-U$95$m), If[LessEqual[t$95$2, -1e-8], N[(N[Sqrt[N[(N[(N[(U$95$m / N[(J$95$m * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision], If[LessEqual[t$95$2, -2e-272], N[(N[(J$95$m * -2.0), $MachinePrecision] * N[Sqrt[N[(t$95$3 * t$95$3 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, Infinity], N[(N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision] * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision], N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]]]), $MachinePrecision]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := t\_0 \cdot \left(J\_m \cdot -2\right)\\
t_2 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot t\_1\\
t_3 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{+306}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq -1 \cdot 10^{-8}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\frac{U\_m}{J\_m \cdot J\_m} \cdot U\_m, 0.25, 1\right)} \cdot t\_1\\
\mathbf{elif}\;t\_2 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;\left(J\_m \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(t\_3, t\_3, 1\right)}\\
\mathbf{elif}\;t\_2 \leq \infty:\\
\;\;\;\;\cos \left(0.5 \cdot K\right) \cdot \left(J\_m \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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))))) < -2.00000000000000003e306Initial program 10.5%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6446.3
Applied rewrites46.3%
if -2.00000000000000003e306 < (*.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-8Initial program 99.9%
Taylor expanded in K around 0
lower-sqrt.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
unpow2N/A
lower-*.f6483.5
Applied rewrites83.5%
if -1e-8 < (*.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.99999999999999986e-272Initial program 99.6%
Taylor expanded in K around 0
Applied rewrites81.4%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6481.4
Applied rewrites81.4%
Taylor expanded in K around 0
lower-*.f6465.3
Applied rewrites65.3%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in U around 0
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f6449.3
Applied rewrites49.3%
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))))) Initial program 72.9%
Taylor expanded in K around 0
Applied rewrites62.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites47.9%
Taylor expanded in U around -inf
lower-/.f6423.3
Applied rewrites23.3%
Final simplification59.6%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1 (* t_0 (* J_m -2.0)))
(t_2 (* (sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0)) t_1))
(t_3 (+ (* (cos (* (* -0.5 K) 2.0)) 0.5) 0.5)))
(*
J_s
(if (<= t_2 (- INFINITY))
(- U_m)
(if (<= t_2 -1e+247)
(*
(sqrt (+ (/ U_m (* (* (/ (* 2.0 J_m) U_m) t_3) (* 2.0 J_m))) 1.0))
t_1)
(if (<= t_2 INFINITY)
(*
(sqrt (+ (/ (* (/ 0.5 J_m) (* (/ U_m (* 2.0 J_m)) U_m)) t_3) 1.0))
t_1)
(*
(fma
(* (/ (* J_m J_m) (* U_m U_m)) (pow (cos (* 0.5 K)) 2.0))
-2.0
-1.0)
(- U_m))))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = t_0 * (J_m * -2.0);
double t_2 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * t_1;
double t_3 = (cos(((-0.5 * K) * 2.0)) * 0.5) + 0.5;
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_2 <= -1e+247) {
tmp = sqrt(((U_m / ((((2.0 * J_m) / U_m) * t_3) * (2.0 * J_m))) + 1.0)) * t_1;
} else if (t_2 <= ((double) INFINITY)) {
tmp = sqrt(((((0.5 / J_m) * ((U_m / (2.0 * J_m)) * U_m)) / t_3) + 1.0)) * t_1;
} else {
tmp = fma((((J_m * J_m) / (U_m * U_m)) * pow(cos((0.5 * K)), 2.0)), -2.0, -1.0) * -U_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(t_0 * Float64(J_m * -2.0)) t_2 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * t_1) t_3 = Float64(Float64(cos(Float64(Float64(-0.5 * K) * 2.0)) * 0.5) + 0.5) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_2 <= -1e+247) tmp = Float64(sqrt(Float64(Float64(U_m / Float64(Float64(Float64(Float64(2.0 * J_m) / U_m) * t_3) * Float64(2.0 * J_m))) + 1.0)) * t_1); elseif (t_2 <= Inf) tmp = Float64(sqrt(Float64(Float64(Float64(Float64(0.5 / J_m) * Float64(Float64(U_m / Float64(2.0 * J_m)) * U_m)) / t_3) + 1.0)) * t_1); else tmp = Float64(fma(Float64(Float64(Float64(J_m * J_m) / Float64(U_m * U_m)) * (cos(Float64(0.5 * K)) ^ 2.0)), -2.0, -1.0) * Float64(-U_m)); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, 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[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[Cos[N[(N[(-0.5 * K), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] * 0.5), $MachinePrecision] + 0.5), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$2, (-Infinity)], (-U$95$m), If[LessEqual[t$95$2, -1e+247], N[(N[Sqrt[N[(N[(U$95$m / N[(N[(N[(N[(2.0 * J$95$m), $MachinePrecision] / U$95$m), $MachinePrecision] * t$95$3), $MachinePrecision] * N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision], If[LessEqual[t$95$2, Infinity], N[(N[Sqrt[N[(N[(N[(N[(0.5 / J$95$m), $MachinePrecision] * N[(N[(U$95$m / N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision]), $MachinePrecision] / t$95$3), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision], N[(N[(N[(N[(N[(J$95$m * J$95$m), $MachinePrecision] / N[(U$95$m * U$95$m), $MachinePrecision]), $MachinePrecision] * N[Power[N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] * -2.0 + -1.0), $MachinePrecision] * (-U$95$m)), $MachinePrecision]]]]), $MachinePrecision]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := t\_0 \cdot \left(J\_m \cdot -2\right)\\
t_2 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot t\_1\\
t_3 := \cos \left(\left(-0.5 \cdot K\right) \cdot 2\right) \cdot 0.5 + 0.5\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq -1 \cdot 10^{+247}:\\
\;\;\;\;\sqrt{\frac{U\_m}{\left(\frac{2 \cdot J\_m}{U\_m} \cdot t\_3\right) \cdot \left(2 \cdot J\_m\right)} + 1} \cdot t\_1\\
\mathbf{elif}\;t\_2 \leq \infty:\\
\;\;\;\;\sqrt{\frac{\frac{0.5}{J\_m} \cdot \left(\frac{U\_m}{2 \cdot J\_m} \cdot U\_m\right)}{t\_3} + 1} \cdot t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{J\_m \cdot J\_m}{U\_m \cdot U\_m} \cdot {\cos \left(0.5 \cdot K\right)}^{2}, -2, -1\right) \cdot \left(-U\_m\right)\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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))))) < -9.99999999999999952e246Initial program 99.9%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-/.f64N/A
associate-/r*N/A
lower-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites99.5%
if -9.99999999999999952e246 < (*.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 81.8%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites80.3%
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))))) Initial program 72.9%
Taylor expanded in U around -inf
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites23.3%
Final simplification77.6%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1 (* t_0 (* J_m -2.0)))
(t_2 (* (sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0)) t_1))
(t_3 (cos (* 0.5 K))))
(*
J_s
(if (<= t_2 (- INFINITY))
(- U_m)
(if (<= t_2 -2e+63)
(*
(sqrt
(+
(/
U_m
(*
(* (/ (* 2.0 J_m) U_m) (+ (* (cos (* (* -0.5 K) 2.0)) 0.5) 0.5))
(* 2.0 J_m)))
1.0))
t_1)
(if (<= t_2 INFINITY)
(*
(*
(* t_3 -2.0)
(sqrt
(fma
(/ 0.5 (* (fma (cos K) 0.5 0.5) J_m))
(* (/ U_m (* 2.0 J_m)) U_m)
1.0)))
J_m)
(*
(fma (* (/ (* J_m J_m) (* U_m U_m)) (pow t_3 2.0)) -2.0 -1.0)
(- U_m))))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = t_0 * (J_m * -2.0);
double t_2 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * t_1;
double t_3 = cos((0.5 * K));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_2 <= -2e+63) {
tmp = sqrt(((U_m / ((((2.0 * J_m) / U_m) * ((cos(((-0.5 * K) * 2.0)) * 0.5) + 0.5)) * (2.0 * J_m))) + 1.0)) * t_1;
} else if (t_2 <= ((double) INFINITY)) {
tmp = ((t_3 * -2.0) * sqrt(fma((0.5 / (fma(cos(K), 0.5, 0.5) * J_m)), ((U_m / (2.0 * J_m)) * U_m), 1.0))) * J_m;
} else {
tmp = fma((((J_m * J_m) / (U_m * U_m)) * pow(t_3, 2.0)), -2.0, -1.0) * -U_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(t_0 * Float64(J_m * -2.0)) t_2 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * t_1) t_3 = cos(Float64(0.5 * K)) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_2 <= -2e+63) tmp = Float64(sqrt(Float64(Float64(U_m / Float64(Float64(Float64(Float64(2.0 * J_m) / U_m) * Float64(Float64(cos(Float64(Float64(-0.5 * K) * 2.0)) * 0.5) + 0.5)) * Float64(2.0 * J_m))) + 1.0)) * t_1); elseif (t_2 <= Inf) tmp = Float64(Float64(Float64(t_3 * -2.0) * sqrt(fma(Float64(0.5 / Float64(fma(cos(K), 0.5, 0.5) * J_m)), Float64(Float64(U_m / Float64(2.0 * J_m)) * U_m), 1.0))) * J_m); else tmp = Float64(fma(Float64(Float64(Float64(J_m * J_m) / Float64(U_m * U_m)) * (t_3 ^ 2.0)), -2.0, -1.0) * Float64(-U_m)); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, 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[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$2, (-Infinity)], (-U$95$m), If[LessEqual[t$95$2, -2e+63], N[(N[Sqrt[N[(N[(U$95$m / N[(N[(N[(N[(2.0 * J$95$m), $MachinePrecision] / U$95$m), $MachinePrecision] * N[(N[(N[Cos[N[(N[(-0.5 * K), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] * 0.5), $MachinePrecision] + 0.5), $MachinePrecision]), $MachinePrecision] * N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision], If[LessEqual[t$95$2, Infinity], N[(N[(N[(t$95$3 * -2.0), $MachinePrecision] * N[Sqrt[N[(N[(0.5 / N[(N[(N[Cos[K], $MachinePrecision] * 0.5 + 0.5), $MachinePrecision] * J$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(U$95$m / N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * J$95$m), $MachinePrecision], N[(N[(N[(N[(N[(J$95$m * J$95$m), $MachinePrecision] / N[(U$95$m * U$95$m), $MachinePrecision]), $MachinePrecision] * N[Power[t$95$3, 2.0], $MachinePrecision]), $MachinePrecision] * -2.0 + -1.0), $MachinePrecision] * (-U$95$m)), $MachinePrecision]]]]), $MachinePrecision]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := t\_0 \cdot \left(J\_m \cdot -2\right)\\
t_2 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot t\_1\\
t_3 := \cos \left(0.5 \cdot K\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq -2 \cdot 10^{+63}:\\
\;\;\;\;\sqrt{\frac{U\_m}{\left(\frac{2 \cdot J\_m}{U\_m} \cdot \left(\cos \left(\left(-0.5 \cdot K\right) \cdot 2\right) \cdot 0.5 + 0.5\right)\right) \cdot \left(2 \cdot J\_m\right)} + 1} \cdot t\_1\\
\mathbf{elif}\;t\_2 \leq \infty:\\
\;\;\;\;\left(\left(t\_3 \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(\frac{0.5}{\mathsf{fma}\left(\cos K, 0.5, 0.5\right) \cdot J\_m}, \frac{U\_m}{2 \cdot J\_m} \cdot U\_m, 1\right)}\right) \cdot J\_m\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{J\_m \cdot J\_m}{U\_m \cdot U\_m} \cdot {t\_3}^{2}, -2, -1\right) \cdot \left(-U\_m\right)\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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.00000000000000012e63Initial program 99.8%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
clear-numN/A
un-div-invN/A
lift-/.f64N/A
associate-/r*N/A
lower-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites99.6%
if -2.00000000000000012e63 < (*.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 77.8%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites75.9%
Applied rewrites75.9%
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))))) Initial program 72.9%
Taylor expanded in U around -inf
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites23.3%
Final simplification77.6%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0))))
(t_2 (/ (* 0.5 U_m) (* 1.0 J_m))))
(*
J_s
(if (<= t_1 (- INFINITY))
(- U_m)
(if (<= t_1 -2e-272)
(* (* J_m -2.0) (sqrt (fma t_2 t_2 1.0)))
(if (<= t_1 INFINITY)
(* (cos (* 0.5 K)) (* J_m -2.0))
(* (/ U_m J_m) J_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double t_2 = (0.5 * U_m) / (1.0 * J_m);
double tmp;
if (t_1 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_1 <= -2e-272) {
tmp = (J_m * -2.0) * sqrt(fma(t_2, t_2, 1.0));
} else if (t_1 <= ((double) INFINITY)) {
tmp = cos((0.5 * K)) * (J_m * -2.0);
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) t_2 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) tmp = 0.0 if (t_1 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_1 <= -2e-272) tmp = Float64(Float64(J_m * -2.0) * sqrt(fma(t_2, t_2, 1.0))); elseif (t_1 <= Inf) tmp = Float64(cos(Float64(0.5 * K)) * Float64(J_m * -2.0)); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, (-Infinity)], (-U$95$m), If[LessEqual[t$95$1, -2e-272], N[(N[(J$95$m * -2.0), $MachinePrecision] * N[Sqrt[N[(t$95$2 * t$95$2 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], N[(N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision] * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision], N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]]), $MachinePrecision]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
t_2 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;\left(J\_m \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(t\_2, t\_2, 1\right)}\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;\cos \left(0.5 \cdot K\right) \cdot \left(J\_m \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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.99999999999999986e-272Initial program 99.8%
Taylor expanded in K around 0
Applied rewrites86.3%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6486.3
Applied rewrites86.3%
Taylor expanded in K around 0
lower-*.f6462.9
Applied rewrites62.9%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in U around 0
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f6449.3
Applied rewrites49.3%
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))))) Initial program 72.9%
Taylor expanded in K around 0
Applied rewrites62.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites47.9%
Taylor expanded in U around -inf
lower-/.f6423.3
Applied rewrites23.3%
Final simplification54.5%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))))
(*
J_s
(if (<= t_1 -2e+306)
(- U_m)
(if (<= t_1 -5e-74)
(* (sqrt (fma (* (/ U_m (* J_m J_m)) U_m) 0.25 1.0)) (* J_m -2.0))
(if (<= t_1 -2e-272) (- U_m) (* (/ U_m J_m) J_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double tmp;
if (t_1 <= -2e+306) {
tmp = -U_m;
} else if (t_1 <= -5e-74) {
tmp = sqrt(fma(((U_m / (J_m * J_m)) * U_m), 0.25, 1.0)) * (J_m * -2.0);
} else if (t_1 <= -2e-272) {
tmp = -U_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) tmp = 0.0 if (t_1 <= -2e+306) tmp = Float64(-U_m); elseif (t_1 <= -5e-74) tmp = Float64(sqrt(fma(Float64(Float64(U_m / Float64(J_m * J_m)) * U_m), 0.25, 1.0)) * Float64(J_m * -2.0)); elseif (t_1 <= -2e-272) tmp = Float64(-U_m); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, -2e+306], (-U$95$m), If[LessEqual[t$95$1, -5e-74], N[(N[Sqrt[N[(N[(N[(U$95$m / N[(J$95$m * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision] * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-272], (-U$95$m), N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{+306}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-74}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\frac{U\_m}{J\_m \cdot J\_m} \cdot U\_m, 0.25, 1\right)} \cdot \left(J\_m \cdot -2\right)\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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))))) < -2.00000000000000003e306 or -4.99999999999999998e-74 < (*.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.99999999999999986e-272Initial program 41.8%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6435.6
Applied rewrites35.6%
if -2.00000000000000003e306 < (*.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.99999999999999998e-74Initial program 99.8%
Taylor expanded in K around 0
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
unpow2N/A
lower-*.f6459.0
Applied rewrites59.0%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in K around 0
Applied rewrites59.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites49.0%
Taylor expanded in U around -inf
lower-/.f6430.1
Applied rewrites30.1%
Final simplification39.9%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))))
(*
J_s
(if (<= t_1 -2e+306)
(- U_m)
(if (<= t_1 -5e-74)
(fma (/ (* U_m U_m) J_m) -0.25 (* J_m -2.0))
(if (<= t_1 -2e-272) (- U_m) (* (/ U_m J_m) J_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double tmp;
if (t_1 <= -2e+306) {
tmp = -U_m;
} else if (t_1 <= -5e-74) {
tmp = fma(((U_m * U_m) / J_m), -0.25, (J_m * -2.0));
} else if (t_1 <= -2e-272) {
tmp = -U_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) tmp = 0.0 if (t_1 <= -2e+306) tmp = Float64(-U_m); elseif (t_1 <= -5e-74) tmp = fma(Float64(Float64(U_m * U_m) / J_m), -0.25, Float64(J_m * -2.0)); elseif (t_1 <= -2e-272) tmp = Float64(-U_m); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, -2e+306], (-U$95$m), If[LessEqual[t$95$1, -5e-74], N[(N[(N[(U$95$m * U$95$m), $MachinePrecision] / J$95$m), $MachinePrecision] * -0.25 + N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-272], (-U$95$m), N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{+306}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-74}:\\
\;\;\;\;\mathsf{fma}\left(\frac{U\_m \cdot U\_m}{J\_m}, -0.25, J\_m \cdot -2\right)\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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))))) < -2.00000000000000003e306 or -4.99999999999999998e-74 < (*.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.99999999999999986e-272Initial program 41.8%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6435.6
Applied rewrites35.6%
if -2.00000000000000003e306 < (*.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.99999999999999998e-74Initial program 99.8%
Taylor expanded in U around 0
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r/N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f6466.9
Applied rewrites66.9%
Taylor expanded in K around 0
Applied rewrites43.5%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in K around 0
Applied rewrites59.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites49.0%
Taylor expanded in U around -inf
lower-/.f6430.1
Applied rewrites30.1%
Final simplification35.3%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))))
(*
J_s
(if (<= t_1 -4e+298)
(- U_m)
(if (<= t_1 -2e-69)
(* (fma (* (* K K) J_m) -0.125 J_m) -2.0)
(if (<= t_1 -2e-272) (- U_m) (* (/ U_m J_m) J_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double tmp;
if (t_1 <= -4e+298) {
tmp = -U_m;
} else if (t_1 <= -2e-69) {
tmp = fma(((K * K) * J_m), -0.125, J_m) * -2.0;
} else if (t_1 <= -2e-272) {
tmp = -U_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) tmp = 0.0 if (t_1 <= -4e+298) tmp = Float64(-U_m); elseif (t_1 <= -2e-69) tmp = Float64(fma(Float64(Float64(K * K) * J_m), -0.125, J_m) * -2.0); elseif (t_1 <= -2e-272) tmp = Float64(-U_m); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, -4e+298], (-U$95$m), If[LessEqual[t$95$1, -2e-69], N[(N[(N[(N[(K * K), $MachinePrecision] * J$95$m), $MachinePrecision] * -0.125 + J$95$m), $MachinePrecision] * -2.0), $MachinePrecision], If[LessEqual[t$95$1, -2e-272], (-U$95$m), N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{+298}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-69}:\\
\;\;\;\;\mathsf{fma}\left(\left(K \cdot K\right) \cdot J\_m, -0.125, J\_m\right) \cdot -2\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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))))) < -3.9999999999999998e298 or -1.9999999999999999e-69 < (*.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.99999999999999986e-272Initial program 44.7%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6435.7
Applied rewrites35.7%
if -3.9999999999999998e298 < (*.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.9999999999999999e-69Initial program 99.8%
Taylor expanded in K around 0
Applied rewrites47.6%
Taylor expanded in U around 0
Applied rewrites47.1%
Taylor expanded in K around 0
Applied rewrites47.1%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in K around 0
Applied rewrites59.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites49.0%
Taylor expanded in U around -inf
lower-/.f6430.1
Applied rewrites30.1%
Final simplification36.3%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (* 0.5 K)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_1)) 2.0) 1.0))
(* t_1 (* J_m -2.0)))))
(*
J_s
(if (<= t_2 -2e+306)
(- U_m)
(if (<= t_2 INFINITY)
(*
(*
(* t_0 -2.0)
(sqrt
(fma
(/ 0.5 (* (fma (cos K) 0.5 0.5) J_m))
(* (/ U_m (* 2.0 J_m)) U_m)
1.0)))
J_m)
(*
(fma (* (/ (* J_m J_m) (* U_m U_m)) (pow t_0 2.0)) -2.0 -1.0)
(- U_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((0.5 * K));
double t_1 = cos((K / 2.0));
double t_2 = sqrt((pow((U_m / ((2.0 * J_m) * t_1)), 2.0) + 1.0)) * (t_1 * (J_m * -2.0));
double tmp;
if (t_2 <= -2e+306) {
tmp = -U_m;
} else if (t_2 <= ((double) INFINITY)) {
tmp = ((t_0 * -2.0) * sqrt(fma((0.5 / (fma(cos(K), 0.5, 0.5) * J_m)), ((U_m / (2.0 * J_m)) * U_m), 1.0))) * J_m;
} else {
tmp = fma((((J_m * J_m) / (U_m * U_m)) * pow(t_0, 2.0)), -2.0, -1.0) * -U_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(0.5 * K)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_1)) ^ 2.0) + 1.0)) * Float64(t_1 * Float64(J_m * -2.0))) tmp = 0.0 if (t_2 <= -2e+306) tmp = Float64(-U_m); elseif (t_2 <= Inf) tmp = Float64(Float64(Float64(t_0 * -2.0) * sqrt(fma(Float64(0.5 / Float64(fma(cos(K), 0.5, 0.5) * J_m)), Float64(Float64(U_m / Float64(2.0 * J_m)) * U_m), 1.0))) * J_m); else tmp = Float64(fma(Float64(Float64(Float64(J_m * J_m) / Float64(U_m * U_m)) * (t_0 ^ 2.0)), -2.0, -1.0) * Float64(-U_m)); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$1 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$2, -2e+306], (-U$95$m), If[LessEqual[t$95$2, Infinity], N[(N[(N[(t$95$0 * -2.0), $MachinePrecision] * N[Sqrt[N[(N[(0.5 / N[(N[(N[Cos[K], $MachinePrecision] * 0.5 + 0.5), $MachinePrecision] * J$95$m), $MachinePrecision]), $MachinePrecision] * N[(N[(U$95$m / N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * J$95$m), $MachinePrecision], N[(N[(N[(N[(N[(J$95$m * J$95$m), $MachinePrecision] / N[(U$95$m * U$95$m), $MachinePrecision]), $MachinePrecision] * N[Power[t$95$0, 2.0], $MachinePrecision]), $MachinePrecision] * -2.0 + -1.0), $MachinePrecision] * (-U$95$m)), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(0.5 \cdot K\right)\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_1}\right)}^{2} + 1} \cdot \left(t\_1 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{+306}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq \infty:\\
\;\;\;\;\left(\left(t\_0 \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(\frac{0.5}{\mathsf{fma}\left(\cos K, 0.5, 0.5\right) \cdot J\_m}, \frac{U\_m}{2 \cdot J\_m} \cdot U\_m, 1\right)}\right) \cdot J\_m\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{J\_m \cdot J\_m}{U\_m \cdot U\_m} \cdot {t\_0}^{2}, -2, -1\right) \cdot \left(-U\_m\right)\\
\end{array}
\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))))) < -2.00000000000000003e306Initial program 10.5%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6446.3
Applied rewrites46.3%
if -2.00000000000000003e306 < (*.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 83.4%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites79.9%
Applied rewrites79.9%
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))))) Initial program 72.9%
Taylor expanded in U around -inf
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites23.3%
Final simplification75.0%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (/ (* 0.5 U_m) (* 1.0 J_m)))
(t_1 (cos (/ K 2.0)))
(t_2 (cos (* 0.5 K)))
(t_3
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_1)) 2.0) 1.0))
(* t_1 (* J_m -2.0)))))
(*
J_s
(if (<= t_3 (- INFINITY))
(- U_m)
(if (<= t_3 INFINITY)
(* (sqrt (fma t_0 t_0 1.0)) (* (* t_2 J_m) -2.0))
(*
(fma (* (/ (* J_m J_m) (* U_m U_m)) (pow t_2 2.0)) -2.0 -1.0)
(- U_m)))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = (0.5 * U_m) / (1.0 * J_m);
double t_1 = cos((K / 2.0));
double t_2 = cos((0.5 * K));
double t_3 = sqrt((pow((U_m / ((2.0 * J_m) * t_1)), 2.0) + 1.0)) * (t_1 * (J_m * -2.0));
double tmp;
if (t_3 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_3 <= ((double) INFINITY)) {
tmp = sqrt(fma(t_0, t_0, 1.0)) * ((t_2 * J_m) * -2.0);
} else {
tmp = fma((((J_m * J_m) / (U_m * U_m)) * pow(t_2, 2.0)), -2.0, -1.0) * -U_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) t_1 = cos(Float64(K / 2.0)) t_2 = cos(Float64(0.5 * K)) t_3 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_1)) ^ 2.0) + 1.0)) * Float64(t_1 * Float64(J_m * -2.0))) tmp = 0.0 if (t_3 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_3 <= Inf) tmp = Float64(sqrt(fma(t_0, t_0, 1.0)) * Float64(Float64(t_2 * J_m) * -2.0)); else tmp = Float64(fma(Float64(Float64(Float64(J_m * J_m) / Float64(U_m * U_m)) * (t_2 ^ 2.0)), -2.0, -1.0) * Float64(-U_m)); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$1 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$3, (-Infinity)], (-U$95$m), If[LessEqual[t$95$3, Infinity], N[(N[Sqrt[N[(t$95$0 * t$95$0 + 1.0), $MachinePrecision]], $MachinePrecision] * N[(N[(t$95$2 * J$95$m), $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(N[(J$95$m * J$95$m), $MachinePrecision] / N[(U$95$m * U$95$m), $MachinePrecision]), $MachinePrecision] * N[Power[t$95$2, 2.0], $MachinePrecision]), $MachinePrecision] * -2.0 + -1.0), $MachinePrecision] * (-U$95$m)), $MachinePrecision]]]), $MachinePrecision]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \cos \left(0.5 \cdot K\right)\\
t_3 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_1}\right)}^{2} + 1} \cdot \left(t\_1 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_3 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_3 \leq \infty:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(t\_0, t\_0, 1\right)} \cdot \left(\left(t\_2 \cdot J\_m\right) \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{J\_m \cdot J\_m}{U\_m \cdot U\_m} \cdot {t\_2}^{2}, -2, -1\right) \cdot \left(-U\_m\right)\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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))))) < +inf.0Initial program 83.6%
Taylor expanded in K around 0
Applied rewrites71.3%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6471.3
Applied rewrites71.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6471.3
lift-/.f64N/A
div-invN/A
metadata-evalN/A
lift-*.f6471.3
Applied rewrites71.3%
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))))) Initial program 72.9%
Taylor expanded in U around -inf
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites23.3%
Final simplification68.2%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (/ (* 0.5 U_m) (* 1.0 J_m)))
(t_1 (cos (/ K 2.0)))
(t_2 (cos (* 0.5 K)))
(t_3
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_1)) 2.0) 1.0))
(* t_1 (* J_m -2.0)))))
(*
J_s
(if (<= t_3 (- INFINITY))
(- U_m)
(if (<= t_3 INFINITY)
(* (sqrt (fma t_0 t_0 1.0)) (* (* t_2 J_m) -2.0))
(/ (* t_2 (- U_m)) (sqrt (fma (cos K) 0.5 0.5))))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = (0.5 * U_m) / (1.0 * J_m);
double t_1 = cos((K / 2.0));
double t_2 = cos((0.5 * K));
double t_3 = sqrt((pow((U_m / ((2.0 * J_m) * t_1)), 2.0) + 1.0)) * (t_1 * (J_m * -2.0));
double tmp;
if (t_3 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_3 <= ((double) INFINITY)) {
tmp = sqrt(fma(t_0, t_0, 1.0)) * ((t_2 * J_m) * -2.0);
} else {
tmp = (t_2 * -U_m) / sqrt(fma(cos(K), 0.5, 0.5));
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) t_1 = cos(Float64(K / 2.0)) t_2 = cos(Float64(0.5 * K)) t_3 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_1)) ^ 2.0) + 1.0)) * Float64(t_1 * Float64(J_m * -2.0))) tmp = 0.0 if (t_3 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_3 <= Inf) tmp = Float64(sqrt(fma(t_0, t_0, 1.0)) * Float64(Float64(t_2 * J_m) * -2.0)); else tmp = Float64(Float64(t_2 * Float64(-U_m)) / sqrt(fma(cos(K), 0.5, 0.5))); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$1 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$3, (-Infinity)], (-U$95$m), If[LessEqual[t$95$3, Infinity], N[(N[Sqrt[N[(t$95$0 * t$95$0 + 1.0), $MachinePrecision]], $MachinePrecision] * N[(N[(t$95$2 * J$95$m), $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], N[(N[(t$95$2 * (-U$95$m)), $MachinePrecision] / N[Sqrt[N[(N[Cos[K], $MachinePrecision] * 0.5 + 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \cos \left(0.5 \cdot K\right)\\
t_3 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_1}\right)}^{2} + 1} \cdot \left(t\_1 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_3 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_3 \leq \infty:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(t\_0, t\_0, 1\right)} \cdot \left(\left(t\_2 \cdot J\_m\right) \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_2 \cdot \left(-U\_m\right)}{\sqrt{\mathsf{fma}\left(\cos K, 0.5, 0.5\right)}}\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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))))) < +inf.0Initial program 83.6%
Taylor expanded in K around 0
Applied rewrites71.3%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6471.3
Applied rewrites71.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6471.3
lift-/.f64N/A
div-invN/A
metadata-evalN/A
lift-*.f6471.3
Applied rewrites71.3%
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))))) Initial program 72.9%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites69.5%
Taylor expanded in U around inf
mul-1-negN/A
*-commutativeN/A
distribute-lft-neg-inN/A
lower-*.f64N/A
lower-neg.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
cos-negN/A
lower-cos.f64N/A
*-commutativeN/A
Applied rewrites24.3%
Applied rewrites24.3%
Applied rewrites24.3%
Final simplification68.2%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (/ (* 0.5 U_m) (* 1.0 J_m)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_1)) 2.0) 1.0))
(* t_1 (* J_m -2.0)))))
(*
J_s
(if (<= t_2 (- INFINITY))
(- U_m)
(if (<= t_2 INFINITY)
(* (sqrt (fma t_0 t_0 1.0)) (* (* (cos (* 0.5 K)) J_m) -2.0))
(* (/ U_m J_m) J_m))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = (0.5 * U_m) / (1.0 * J_m);
double t_1 = cos((K / 2.0));
double t_2 = sqrt((pow((U_m / ((2.0 * J_m) * t_1)), 2.0) + 1.0)) * (t_1 * (J_m * -2.0));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_2 <= ((double) INFINITY)) {
tmp = sqrt(fma(t_0, t_0, 1.0)) * ((cos((0.5 * K)) * J_m) * -2.0);
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_1)) ^ 2.0) + 1.0)) * Float64(t_1 * Float64(J_m * -2.0))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_2 <= Inf) tmp = Float64(sqrt(fma(t_0, t_0, 1.0)) * Float64(Float64(cos(Float64(0.5 * K)) * J_m) * -2.0)); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$1 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$2, (-Infinity)], (-U$95$m), If[LessEqual[t$95$2, Infinity], N[(N[Sqrt[N[(t$95$0 * t$95$0 + 1.0), $MachinePrecision]], $MachinePrecision] * N[(N[(N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision] * J$95$m), $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_1}\right)}^{2} + 1} \cdot \left(t\_1 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_2 \leq \infty:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(t\_0, t\_0, 1\right)} \cdot \left(\left(\cos \left(0.5 \cdot K\right) \cdot J\_m\right) \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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))))) < +inf.0Initial program 83.6%
Taylor expanded in K around 0
Applied rewrites71.3%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6471.3
Applied rewrites71.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6471.3
lift-/.f64N/A
div-invN/A
metadata-evalN/A
lift-*.f6471.3
Applied rewrites71.3%
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))))) Initial program 72.9%
Taylor expanded in K around 0
Applied rewrites62.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites47.9%
Taylor expanded in U around -inf
lower-/.f6423.3
Applied rewrites23.3%
Final simplification68.2%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))))
(*
J_s
(if (<= t_1 -2e+306)
(- U_m)
(if (<= t_1 INFINITY)
(*
(*
(sqrt (fma (/ 0.5 J_m) (* (/ U_m (* 2.0 J_m)) U_m) 1.0))
(* (cos (* 0.5 K)) -2.0))
J_m)
(* (/ U_m J_m) J_m))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double tmp;
if (t_1 <= -2e+306) {
tmp = -U_m;
} else if (t_1 <= ((double) INFINITY)) {
tmp = (sqrt(fma((0.5 / J_m), ((U_m / (2.0 * J_m)) * U_m), 1.0)) * (cos((0.5 * K)) * -2.0)) * J_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) tmp = 0.0 if (t_1 <= -2e+306) tmp = Float64(-U_m); elseif (t_1 <= Inf) tmp = Float64(Float64(sqrt(fma(Float64(0.5 / J_m), Float64(Float64(U_m / Float64(2.0 * J_m)) * U_m), 1.0)) * Float64(cos(Float64(0.5 * K)) * -2.0)) * J_m); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, -2e+306], (-U$95$m), If[LessEqual[t$95$1, Infinity], N[(N[(N[Sqrt[N[(N[(0.5 / J$95$m), $MachinePrecision] * N[(N[(U$95$m / N[(2.0 * J$95$m), $MachinePrecision]), $MachinePrecision] * U$95$m), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision] * J$95$m), $MachinePrecision], N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]), $MachinePrecision]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{+306}:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;\left(\sqrt{\mathsf{fma}\left(\frac{0.5}{J\_m}, \frac{U\_m}{2 \cdot J\_m} \cdot U\_m, 1\right)} \cdot \left(\cos \left(0.5 \cdot K\right) \cdot -2\right)\right) \cdot J\_m\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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))))) < -2.00000000000000003e306Initial program 10.5%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6446.3
Applied rewrites46.3%
if -2.00000000000000003e306 < (*.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 83.4%
lift-pow.f64N/A
unpow2N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites79.9%
Applied rewrites79.9%
Taylor expanded in K around 0
lower-/.f6469.4
Applied rewrites69.4%
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))))) Initial program 72.9%
Taylor expanded in K around 0
Applied rewrites62.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites47.9%
Taylor expanded in U around -inf
lower-/.f6423.3
Applied rewrites23.3%
Final simplification66.1%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0))))
(t_2 (/ (* 0.5 U_m) (* 1.0 J_m))))
(*
J_s
(if (<= t_1 (- INFINITY))
(- U_m)
(if (<= t_1 -2e-272)
(* (* J_m -2.0) (sqrt (fma t_2 t_2 1.0)))
(* (/ U_m J_m) J_m))))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double t_1 = sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0));
double t_2 = (0.5 * U_m) / (1.0 * J_m);
double tmp;
if (t_1 <= -((double) INFINITY)) {
tmp = -U_m;
} else if (t_1 <= -2e-272) {
tmp = (J_m * -2.0) * sqrt(fma(t_2, t_2, 1.0));
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) t_2 = Float64(Float64(0.5 * U_m) / Float64(1.0 * J_m)) tmp = 0.0 if (t_1 <= Float64(-Inf)) tmp = Float64(-U_m); elseif (t_1 <= -2e-272) tmp = Float64(Float64(J_m * -2.0) * sqrt(fma(t_2, t_2, 1.0))); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(0.5 * U$95$m), $MachinePrecision] / N[(1.0 * J$95$m), $MachinePrecision]), $MachinePrecision]}, N[(J$95$s * If[LessEqual[t$95$1, (-Infinity)], (-U$95$m), If[LessEqual[t$95$1, -2e-272], N[(N[(J$95$m * -2.0), $MachinePrecision] * N[Sqrt[N[(t$95$2 * t$95$2 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right)\\
t_2 := \frac{0.5 \cdot U\_m}{1 \cdot J\_m}\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -\infty:\\
\;\;\;\;-U\_m\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;\left(J\_m \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(t\_2, t\_2, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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 5.4%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6449.0
Applied rewrites49.0%
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.99999999999999986e-272Initial program 99.8%
Taylor expanded in K around 0
Applied rewrites86.3%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
lower-fma.f6486.3
Applied rewrites86.3%
Taylor expanded in K around 0
lower-*.f6462.9
Applied rewrites62.9%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in K around 0
Applied rewrites59.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites49.0%
Taylor expanded in U around -inf
lower-/.f6430.1
Applied rewrites30.1%
Final simplification45.2%
U_m = (fabs.f64 U)
J\_m = (fabs.f64 J)
J\_s = (copysign.f64 #s(literal 1 binary64) J)
(FPCore (J_s J_m K U_m)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(*
J_s
(if (<=
(*
(sqrt (+ (pow (/ U_m (* (* 2.0 J_m) t_0)) 2.0) 1.0))
(* t_0 (* J_m -2.0)))
-2e-272)
(- U_m)
(* (/ U_m J_m) J_m)))))U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
double t_0 = cos((K / 2.0));
double tmp;
if ((sqrt((pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0))) <= -2e-272) {
tmp = -U_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = abs(u)
J\_m = abs(j)
J\_s = copysign(1.0d0, j)
real(8) function code(j_s, j_m, k, u_m)
real(8), intent (in) :: j_s
real(8), intent (in) :: j_m
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 ((sqrt((((u_m / ((2.0d0 * j_m) * t_0)) ** 2.0d0) + 1.0d0)) * (t_0 * (j_m * (-2.0d0)))) <= (-2d-272)) then
tmp = -u_m
else
tmp = (u_m / j_m) * j_m
end if
code = j_s * tmp
end function
U_m = Math.abs(U);
J\_m = Math.abs(J);
J\_s = Math.copySign(1.0, J);
public static double code(double J_s, double J_m, double K, double U_m) {
double t_0 = Math.cos((K / 2.0));
double tmp;
if ((Math.sqrt((Math.pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0))) <= -2e-272) {
tmp = -U_m;
} else {
tmp = (U_m / J_m) * J_m;
}
return J_s * tmp;
}
U_m = math.fabs(U) J\_m = math.fabs(J) J\_s = math.copysign(1.0, J) def code(J_s, J_m, K, U_m): t_0 = math.cos((K / 2.0)) tmp = 0 if (math.sqrt((math.pow((U_m / ((2.0 * J_m) * t_0)), 2.0) + 1.0)) * (t_0 * (J_m * -2.0))) <= -2e-272: tmp = -U_m else: tmp = (U_m / J_m) * J_m return J_s * tmp
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(sqrt(Float64((Float64(U_m / Float64(Float64(2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * Float64(t_0 * Float64(J_m * -2.0))) <= -2e-272) tmp = Float64(-U_m); else tmp = Float64(Float64(U_m / J_m) * J_m); end return Float64(J_s * tmp) end
U_m = abs(U); J\_m = abs(J); J\_s = sign(J) * abs(1.0); function tmp_2 = code(J_s, J_m, K, U_m) t_0 = cos((K / 2.0)); tmp = 0.0; if ((sqrt((((U_m / ((2.0 * J_m) * t_0)) ^ 2.0) + 1.0)) * (t_0 * (J_m * -2.0))) <= -2e-272) tmp = -U_m; else tmp = (U_m / J_m) * J_m; end tmp_2 = J_s * tmp; end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(J$95$s * If[LessEqual[N[(N[Sqrt[N[(N[Power[N[(U$95$m / N[(N[(2.0 * J$95$m), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[(t$95$0 * N[(J$95$m * -2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -2e-272], (-U$95$m), N[(N[(U$95$m / J$95$m), $MachinePrecision] * J$95$m), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
J\_s \cdot \begin{array}{l}
\mathbf{if}\;\sqrt{{\left(\frac{U\_m}{\left(2 \cdot J\_m\right) \cdot t\_0}\right)}^{2} + 1} \cdot \left(t\_0 \cdot \left(J\_m \cdot -2\right)\right) \leq -2 \cdot 10^{-272}:\\
\;\;\;\;-U\_m\\
\mathbf{else}:\\
\;\;\;\;\frac{U\_m}{J\_m} \cdot J\_m\\
\end{array}
\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.99999999999999986e-272Initial program 74.9%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6426.7
Applied rewrites26.7%
if -1.99999999999999986e-272 < (*.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 70.6%
Taylor expanded in K around 0
Applied rewrites59.3%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
div-invN/A
metadata-evalN/A
lift-*.f64N/A
lift-cos.f64N/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites49.0%
Taylor expanded in U around -inf
lower-/.f6430.1
Applied rewrites30.1%
Final simplification28.3%
U_m = (fabs.f64 U) J\_m = (fabs.f64 J) J\_s = (copysign.f64 #s(literal 1 binary64) J) (FPCore (J_s J_m K U_m) :precision binary64 (* J_s (- U_m)))
U_m = fabs(U);
J\_m = fabs(J);
J\_s = copysign(1.0, J);
double code(double J_s, double J_m, double K, double U_m) {
return J_s * -U_m;
}
U_m = abs(u)
J\_m = abs(j)
J\_s = copysign(1.0d0, j)
real(8) function code(j_s, j_m, k, u_m)
real(8), intent (in) :: j_s
real(8), intent (in) :: j_m
real(8), intent (in) :: k
real(8), intent (in) :: u_m
code = j_s * -u_m
end function
U_m = Math.abs(U);
J\_m = Math.abs(J);
J\_s = Math.copySign(1.0, J);
public static double code(double J_s, double J_m, double K, double U_m) {
return J_s * -U_m;
}
U_m = math.fabs(U) J\_m = math.fabs(J) J\_s = math.copysign(1.0, J) def code(J_s, J_m, K, U_m): return J_s * -U_m
U_m = abs(U) J\_m = abs(J) J\_s = copysign(1.0, J) function code(J_s, J_m, K, U_m) return Float64(J_s * Float64(-U_m)) end
U_m = abs(U); J\_m = abs(J); J\_s = sign(J) * abs(1.0); function tmp = code(J_s, J_m, K, U_m) tmp = J_s * -U_m; end
U_m = N[Abs[U], $MachinePrecision]
J\_m = N[Abs[J], $MachinePrecision]
J\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[J$95$s_, J$95$m_, K_, U$95$m_] := N[(J$95$s * (-U$95$m)), $MachinePrecision]
\begin{array}{l}
U_m = \left|U\right|
\\
J\_m = \left|J\right|
\\
J\_s = \mathsf{copysign}\left(1, J\right)
\\
J\_s \cdot \left(-U\_m\right)
\end{array}
Initial program 72.9%
Taylor expanded in U around inf
mul-1-negN/A
lower-neg.f6424.2
Applied rewrites24.2%
herbie shell --seed 2024240
(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)))))