
(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)));
}
module fmin_fmax_functions
implicit none
private
public fmax
public fmin
interface fmax
module procedure fmax88
module procedure fmax44
module procedure fmax84
module procedure fmax48
end interface
interface fmin
module procedure fmin88
module procedure fmin44
module procedure fmin84
module procedure fmin48
end interface
contains
real(8) function fmax88(x, y) result (res)
real(8), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(x, max(x, y), y /= y), x /= x)
end function
real(4) function fmax44(x, y) result (res)
real(4), intent (in) :: x
real(4), intent (in) :: y
res = merge(y, merge(x, max(x, y), y /= y), x /= x)
end function
real(8) function fmax84(x, y) result(res)
real(8), intent (in) :: x
real(4), intent (in) :: y
res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
end function
real(8) function fmax48(x, y) result(res)
real(4), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
end function
real(8) function fmin88(x, y) result (res)
real(8), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(x, min(x, y), y /= y), x /= x)
end function
real(4) function fmin44(x, y) result (res)
real(4), intent (in) :: x
real(4), intent (in) :: y
res = merge(y, merge(x, min(x, y), y /= y), x /= x)
end function
real(8) function fmin84(x, y) result(res)
real(8), intent (in) :: x
real(4), intent (in) :: y
res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
end function
real(8) function fmin48(x, y) result(res)
real(4), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
end function
end module
real(8) function code(j, k, u)
use fmin_fmax_functions
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}
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}
Herbie found 13 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)));
}
module fmin_fmax_functions
implicit none
private
public fmax
public fmin
interface fmax
module procedure fmax88
module procedure fmax44
module procedure fmax84
module procedure fmax48
end interface
interface fmin
module procedure fmin88
module procedure fmin44
module procedure fmin84
module procedure fmin48
end interface
contains
real(8) function fmax88(x, y) result (res)
real(8), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(x, max(x, y), y /= y), x /= x)
end function
real(4) function fmax44(x, y) result (res)
real(4), intent (in) :: x
real(4), intent (in) :: y
res = merge(y, merge(x, max(x, y), y /= y), x /= x)
end function
real(8) function fmax84(x, y) result(res)
real(8), intent (in) :: x
real(4), intent (in) :: y
res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
end function
real(8) function fmax48(x, y) result(res)
real(4), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
end function
real(8) function fmin88(x, y) result (res)
real(8), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(x, min(x, y), y /= y), x /= x)
end function
real(4) function fmin44(x, y) result (res)
real(4), intent (in) :: x
real(4), intent (in) :: y
res = merge(y, merge(x, min(x, y), y /= y), x /= x)
end function
real(8) function fmin84(x, y) result(res)
real(8), intent (in) :: x
real(4), intent (in) :: y
res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
end function
real(8) function fmin48(x, y) result(res)
real(4), intent (in) :: x
real(8), intent (in) :: y
res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
end function
end module
real(8) function code(j, k, u)
use fmin_fmax_functions
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}
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}
(FPCore (J K U)
:precision binary64
(let* ((t_0 (* -2.0 (fabs J)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(* t_0 t_1)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_1)) 2.0)))))
(t_3 (cos (* 0.5 K)))
(t_4 (* -2.0 (* (fabs U) (* t_3 (sqrt (/ 0.25 (pow t_3 2.0))))))))
(*
(copysign 1.0 J)
(if (<= t_2 (- INFINITY))
t_4
(if (<= t_2 5e+307)
(*
(* t_0 (cos (* K 0.5)))
(sqrt
(+
1.0
(pow (/ (fabs U) (* (+ (fabs J) (fabs J)) (cos (* -0.5 K)))) 2.0))))
t_4)))))double code(double J, double K, double U) {
double t_0 = -2.0 * fabs(J);
double t_1 = cos((K / 2.0));
double t_2 = (t_0 * t_1) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_1)), 2.0)));
double t_3 = cos((0.5 * K));
double t_4 = -2.0 * (fabs(U) * (t_3 * sqrt((0.25 / pow(t_3, 2.0)))));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = t_4;
} else if (t_2 <= 5e+307) {
tmp = (t_0 * cos((K * 0.5))) * sqrt((1.0 + pow((fabs(U) / ((fabs(J) + fabs(J)) * cos((-0.5 * K)))), 2.0)));
} else {
tmp = t_4;
}
return copysign(1.0, J) * tmp;
}
public static double code(double J, double K, double U) {
double t_0 = -2.0 * Math.abs(J);
double t_1 = Math.cos((K / 2.0));
double t_2 = (t_0 * t_1) * Math.sqrt((1.0 + Math.pow((Math.abs(U) / ((2.0 * Math.abs(J)) * t_1)), 2.0)));
double t_3 = Math.cos((0.5 * K));
double t_4 = -2.0 * (Math.abs(U) * (t_3 * Math.sqrt((0.25 / Math.pow(t_3, 2.0)))));
double tmp;
if (t_2 <= -Double.POSITIVE_INFINITY) {
tmp = t_4;
} else if (t_2 <= 5e+307) {
tmp = (t_0 * Math.cos((K * 0.5))) * Math.sqrt((1.0 + Math.pow((Math.abs(U) / ((Math.abs(J) + Math.abs(J)) * Math.cos((-0.5 * K)))), 2.0)));
} else {
tmp = t_4;
}
return Math.copySign(1.0, J) * tmp;
}
def code(J, K, U): t_0 = -2.0 * math.fabs(J) t_1 = math.cos((K / 2.0)) t_2 = (t_0 * t_1) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((2.0 * math.fabs(J)) * t_1)), 2.0))) t_3 = math.cos((0.5 * K)) t_4 = -2.0 * (math.fabs(U) * (t_3 * math.sqrt((0.25 / math.pow(t_3, 2.0))))) tmp = 0 if t_2 <= -math.inf: tmp = t_4 elif t_2 <= 5e+307: tmp = (t_0 * math.cos((K * 0.5))) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((math.fabs(J) + math.fabs(J)) * math.cos((-0.5 * K)))), 2.0))) else: tmp = t_4 return math.copysign(1.0, J) * tmp
function code(J, K, U) t_0 = Float64(-2.0 * abs(J)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(Float64(t_0 * t_1) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_1)) ^ 2.0)))) t_3 = cos(Float64(0.5 * K)) t_4 = Float64(-2.0 * Float64(abs(U) * Float64(t_3 * sqrt(Float64(0.25 / (t_3 ^ 2.0)))))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = t_4; elseif (t_2 <= 5e+307) tmp = Float64(Float64(t_0 * cos(Float64(K * 0.5))) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(abs(J) + abs(J)) * cos(Float64(-0.5 * K)))) ^ 2.0)))); else tmp = t_4; end return Float64(copysign(1.0, J) * tmp) end
function tmp_2 = code(J, K, U) t_0 = -2.0 * abs(J); t_1 = cos((K / 2.0)); t_2 = (t_0 * t_1) * sqrt((1.0 + ((abs(U) / ((2.0 * abs(J)) * t_1)) ^ 2.0))); t_3 = cos((0.5 * K)); t_4 = -2.0 * (abs(U) * (t_3 * sqrt((0.25 / (t_3 ^ 2.0))))); tmp = 0.0; if (t_2 <= -Inf) tmp = t_4; elseif (t_2 <= 5e+307) tmp = (t_0 * cos((K * 0.5))) * sqrt((1.0 + ((abs(U) / ((abs(J) + abs(J)) * cos((-0.5 * K)))) ^ 2.0))); else tmp = t_4; end tmp_2 = (sign(J) * abs(1.0)) * tmp; end
code[J_, K_, U_] := Block[{t$95$0 = N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(t$95$0 * t$95$1), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[(-2.0 * N[(N[Abs[U], $MachinePrecision] * N[(t$95$3 * N[Sqrt[N[(0.25 / N[Power[t$95$3, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$2, (-Infinity)], t$95$4, If[LessEqual[t$95$2, 5e+307], N[(N[(t$95$0 * N[Cos[N[(K * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(N[Abs[J], $MachinePrecision] + N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$4]]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := -2 \cdot \left|J\right|\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \left(t\_0 \cdot t\_1\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_1}\right)}^{2}}\\
t_3 := \cos \left(0.5 \cdot K\right)\\
t_4 := -2 \cdot \left(\left|U\right| \cdot \left(t\_3 \cdot \sqrt{\frac{0.25}{{t\_3}^{2}}}\right)\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;t\_4\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(t\_0 \cdot \cos \left(K \cdot 0.5\right)\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(\left|J\right| + \left|J\right|\right) \cdot \cos \left(-0.5 \cdot K\right)}\right)}^{2}}\\
\mathbf{else}:\\
\;\;\;\;t\_4\\
\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.0 or 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in J around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f64N/A
lower-cos.f64N/A
lower-*.f6426.2%
Applied rewrites26.2%
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))))) < 5e307Initial program 73.8%
lift-/.f64N/A
mult-flipN/A
metadata-evalN/A
lower-*.f6473.8%
Applied rewrites73.8%
lift-/.f64N/A
mult-flipN/A
metadata-evalN/A
lower-*.f6473.8%
Applied rewrites73.8%
Applied rewrites73.8%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (/ (fabs U) (fabs J)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(* (* -2.0 (fabs J)) t_1)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_1)) 2.0)))))
(t_3 (cos (* 0.5 K)))
(t_4 (* -2.0 (* (fabs U) (* t_3 (sqrt (/ 0.25 (pow t_3 2.0))))))))
(*
(copysign 1.0 J)
(if (<= t_2 (- INFINITY))
t_4
(if (<= t_2 5e+307)
(*
(*
(sqrt (fma t_0 (/ t_0 (* (fma (cos K) 0.5 0.5) 4.0)) 1.0))
(fabs J))
(* (cos (* -0.5 K)) -2.0))
t_4)))))double code(double J, double K, double U) {
double t_0 = fabs(U) / fabs(J);
double t_1 = cos((K / 2.0));
double t_2 = ((-2.0 * fabs(J)) * t_1) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_1)), 2.0)));
double t_3 = cos((0.5 * K));
double t_4 = -2.0 * (fabs(U) * (t_3 * sqrt((0.25 / pow(t_3, 2.0)))));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = t_4;
} else if (t_2 <= 5e+307) {
tmp = (sqrt(fma(t_0, (t_0 / (fma(cos(K), 0.5, 0.5) * 4.0)), 1.0)) * fabs(J)) * (cos((-0.5 * K)) * -2.0);
} else {
tmp = t_4;
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = Float64(abs(U) / abs(J)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(Float64(Float64(-2.0 * abs(J)) * t_1) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_1)) ^ 2.0)))) t_3 = cos(Float64(0.5 * K)) t_4 = Float64(-2.0 * Float64(abs(U) * Float64(t_3 * sqrt(Float64(0.25 / (t_3 ^ 2.0)))))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = t_4; elseif (t_2 <= 5e+307) tmp = Float64(Float64(sqrt(fma(t_0, Float64(t_0 / Float64(fma(cos(K), 0.5, 0.5) * 4.0)), 1.0)) * abs(J)) * Float64(cos(Float64(-0.5 * K)) * -2.0)); else tmp = t_4; end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[(-2.0 * N[(N[Abs[U], $MachinePrecision] * N[(t$95$3 * N[Sqrt[N[(0.25 / N[Power[t$95$3, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$2, (-Infinity)], t$95$4, If[LessEqual[t$95$2, 5e+307], N[(N[(N[Sqrt[N[(t$95$0 * N[(t$95$0 / N[(N[(N[Cos[K], $MachinePrecision] * 0.5 + 0.5), $MachinePrecision] * 4.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], t$95$4]]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := \frac{\left|U\right|}{\left|J\right|}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \left(\left(-2 \cdot \left|J\right|\right) \cdot t\_1\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_1}\right)}^{2}}\\
t_3 := \cos \left(0.5 \cdot K\right)\\
t_4 := -2 \cdot \left(\left|U\right| \cdot \left(t\_3 \cdot \sqrt{\frac{0.25}{{t\_3}^{2}}}\right)\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;t\_4\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\sqrt{\mathsf{fma}\left(t\_0, \frac{t\_0}{\mathsf{fma}\left(\cos K, 0.5, 0.5\right) \cdot 4}, 1\right)} \cdot \left|J\right|\right) \cdot \left(\cos \left(-0.5 \cdot K\right) \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;t\_4\\
\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.0 or 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in J around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f64N/A
lower-cos.f64N/A
lower-*.f6426.2%
Applied rewrites26.2%
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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift--.f64N/A
sub-flipN/A
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
metadata-evalN/A
lower-fma.f64N/A
Applied rewrites73.7%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (/ (fabs U) (fabs J)))
(t_1 (cos (/ K 2.0)))
(t_2
(*
(* (* -2.0 (fabs J)) t_1)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_1)) 2.0)))))
(t_3 (cos (* 0.5 K)))
(t_4 (* -2.0 (* (fabs U) (* t_3 (sqrt (/ 0.25 (pow t_3 2.0))))))))
(*
(copysign 1.0 J)
(if (<= t_2 (- INFINITY))
t_4
(if (<= t_2 5e-178)
(*
(* (sqrt (- (/ (/ (* t_0 t_0) 4.0) (+ 0.5 0.5)) -1.0)) (fabs J))
(* (cos (* -0.5 K)) -2.0))
(if (<= t_2 5e+307)
(*
(*
(*
(sqrt
(fma
(/
(* (/ (fabs U) (* (fabs J) (fabs J))) (fabs U))
(- (cos K) -1.0))
0.5
1.0))
t_3)
-2.0)
(fabs J))
t_4))))))double code(double J, double K, double U) {
double t_0 = fabs(U) / fabs(J);
double t_1 = cos((K / 2.0));
double t_2 = ((-2.0 * fabs(J)) * t_1) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_1)), 2.0)));
double t_3 = cos((0.5 * K));
double t_4 = -2.0 * (fabs(U) * (t_3 * sqrt((0.25 / pow(t_3, 2.0)))));
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = t_4;
} else if (t_2 <= 5e-178) {
tmp = (sqrt(((((t_0 * t_0) / 4.0) / (0.5 + 0.5)) - -1.0)) * fabs(J)) * (cos((-0.5 * K)) * -2.0);
} else if (t_2 <= 5e+307) {
tmp = ((sqrt(fma((((fabs(U) / (fabs(J) * fabs(J))) * fabs(U)) / (cos(K) - -1.0)), 0.5, 1.0)) * t_3) * -2.0) * fabs(J);
} else {
tmp = t_4;
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = Float64(abs(U) / abs(J)) t_1 = cos(Float64(K / 2.0)) t_2 = Float64(Float64(Float64(-2.0 * abs(J)) * t_1) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_1)) ^ 2.0)))) t_3 = cos(Float64(0.5 * K)) t_4 = Float64(-2.0 * Float64(abs(U) * Float64(t_3 * sqrt(Float64(0.25 / (t_3 ^ 2.0)))))) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = t_4; elseif (t_2 <= 5e-178) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(Float64(t_0 * t_0) / 4.0) / Float64(0.5 + 0.5)) - -1.0)) * abs(J)) * Float64(cos(Float64(-0.5 * K)) * -2.0)); elseif (t_2 <= 5e+307) tmp = Float64(Float64(Float64(sqrt(fma(Float64(Float64(Float64(abs(U) / Float64(abs(J) * abs(J))) * abs(U)) / Float64(cos(K) - -1.0)), 0.5, 1.0)) * t_3) * -2.0) * abs(J)); else tmp = t_4; end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[(-2.0 * N[(N[Abs[U], $MachinePrecision] * N[(t$95$3 * N[Sqrt[N[(0.25 / N[Power[t$95$3, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$2, (-Infinity)], t$95$4, If[LessEqual[t$95$2, 5e-178], N[(N[(N[Sqrt[N[(N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] / 4.0), $MachinePrecision] / N[(0.5 + 0.5), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision]], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e+307], N[(N[(N[(N[Sqrt[N[(N[(N[(N[(N[Abs[U], $MachinePrecision] / N[(N[Abs[J], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Abs[U], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[K], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] * 0.5 + 1.0), $MachinePrecision]], $MachinePrecision] * t$95$3), $MachinePrecision] * -2.0), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], t$95$4]]]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := \frac{\left|U\right|}{\left|J\right|}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
t_2 := \left(\left(-2 \cdot \left|J\right|\right) \cdot t\_1\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_1}\right)}^{2}}\\
t_3 := \cos \left(0.5 \cdot K\right)\\
t_4 := -2 \cdot \left(\left|U\right| \cdot \left(t\_3 \cdot \sqrt{\frac{0.25}{{t\_3}^{2}}}\right)\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;t\_4\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-178}:\\
\;\;\;\;\left(\sqrt{\frac{\frac{t\_0 \cdot t\_0}{4}}{0.5 + 0.5} - -1} \cdot \left|J\right|\right) \cdot \left(\cos \left(-0.5 \cdot K\right) \cdot -2\right)\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\left(\sqrt{\mathsf{fma}\left(\frac{\frac{\left|U\right|}{\left|J\right| \cdot \left|J\right|} \cdot \left|U\right|}{\cos K - -1}, 0.5, 1\right)} \cdot t\_3\right) \cdot -2\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;t\_4\\
\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.0 or 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in J around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f64N/A
lower-cos.f64N/A
lower-*.f6426.2%
Applied rewrites26.2%
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.99999999999999976e-178Initial program 73.8%
Applied rewrites73.6%
Taylor expanded in K around 0
Applied rewrites64.8%
if 4.99999999999999976e-178 < (*.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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (* -0.5 K)))
(t_1 (* -1.0 (/ (* (fabs U) t_0) (fabs t_0))))
(t_2 (cos (/ K 2.0)))
(t_3
(*
(* (* -2.0 (fabs J)) t_2)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_2)) 2.0)))))
(t_4 (/ (fabs U) (fabs J))))
(*
(copysign 1.0 J)
(if (<= t_3 (- INFINITY))
t_1
(if (<= t_3 5e-178)
(*
(* (sqrt (- (/ (/ (* t_4 t_4) 4.0) (+ 0.5 0.5)) -1.0)) (fabs J))
(* t_0 -2.0))
(if (<= t_3 5e+307)
(*
(*
(*
(sqrt
(fma
(/
(* (/ (fabs U) (* (fabs J) (fabs J))) (fabs U))
(- (cos K) -1.0))
0.5
1.0))
(cos (* 0.5 K)))
-2.0)
(fabs J))
t_1))))))double code(double J, double K, double U) {
double t_0 = cos((-0.5 * K));
double t_1 = -1.0 * ((fabs(U) * t_0) / fabs(t_0));
double t_2 = cos((K / 2.0));
double t_3 = ((-2.0 * fabs(J)) * t_2) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_2)), 2.0)));
double t_4 = fabs(U) / fabs(J);
double tmp;
if (t_3 <= -((double) INFINITY)) {
tmp = t_1;
} else if (t_3 <= 5e-178) {
tmp = (sqrt(((((t_4 * t_4) / 4.0) / (0.5 + 0.5)) - -1.0)) * fabs(J)) * (t_0 * -2.0);
} else if (t_3 <= 5e+307) {
tmp = ((sqrt(fma((((fabs(U) / (fabs(J) * fabs(J))) * fabs(U)) / (cos(K) - -1.0)), 0.5, 1.0)) * cos((0.5 * K))) * -2.0) * fabs(J);
} else {
tmp = t_1;
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = cos(Float64(-0.5 * K)) t_1 = Float64(-1.0 * Float64(Float64(abs(U) * t_0) / abs(t_0))) t_2 = cos(Float64(K / 2.0)) t_3 = Float64(Float64(Float64(-2.0 * abs(J)) * t_2) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_2)) ^ 2.0)))) t_4 = Float64(abs(U) / abs(J)) tmp = 0.0 if (t_3 <= Float64(-Inf)) tmp = t_1; elseif (t_3 <= 5e-178) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(Float64(t_4 * t_4) / 4.0) / Float64(0.5 + 0.5)) - -1.0)) * abs(J)) * Float64(t_0 * -2.0)); elseif (t_3 <= 5e+307) tmp = Float64(Float64(Float64(sqrt(fma(Float64(Float64(Float64(abs(U) / Float64(abs(J) * abs(J))) * abs(U)) / Float64(cos(K) - -1.0)), 0.5, 1.0)) * cos(Float64(0.5 * K))) * -2.0) * abs(J)); else tmp = t_1; end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(-1.0 * N[(N[(N[Abs[U], $MachinePrecision] * t$95$0), $MachinePrecision] / N[Abs[t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$2), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$2), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$3, (-Infinity)], t$95$1, If[LessEqual[t$95$3, 5e-178], N[(N[(N[Sqrt[N[(N[(N[(N[(t$95$4 * t$95$4), $MachinePrecision] / 4.0), $MachinePrecision] / N[(0.5 + 0.5), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision]], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[(t$95$0 * -2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$3, 5e+307], N[(N[(N[(N[Sqrt[N[(N[(N[(N[(N[Abs[U], $MachinePrecision] / N[(N[Abs[J], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Abs[U], $MachinePrecision]), $MachinePrecision] / N[(N[Cos[K], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] * 0.5 + 1.0), $MachinePrecision]], $MachinePrecision] * N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * -2.0), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], t$95$1]]]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := \cos \left(-0.5 \cdot K\right)\\
t_1 := -1 \cdot \frac{\left|U\right| \cdot t\_0}{\left|t\_0\right|}\\
t_2 := \cos \left(\frac{K}{2}\right)\\
t_3 := \left(\left(-2 \cdot \left|J\right|\right) \cdot t\_2\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_2}\right)}^{2}}\\
t_4 := \frac{\left|U\right|}{\left|J\right|}\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_3 \leq -\infty:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{-178}:\\
\;\;\;\;\left(\sqrt{\frac{\frac{t\_4 \cdot t\_4}{4}}{0.5 + 0.5} - -1} \cdot \left|J\right|\right) \cdot \left(t\_0 \cdot -2\right)\\
\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\left(\sqrt{\mathsf{fma}\left(\frac{\frac{\left|U\right|}{\left|J\right| \cdot \left|J\right|} \cdot \left|U\right|}{\cos K - -1}, 0.5, 1\right)} \cdot \cos \left(0.5 \cdot K\right)\right) \cdot -2\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\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.0 or 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Applied rewrites12.8%
Taylor expanded in J around -inf
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-fabs.f64N/A
lower-cos.f64N/A
lower-*.f6426.2%
Applied rewrites26.2%
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.99999999999999976e-178Initial program 73.8%
Applied rewrites73.6%
Taylor expanded in K around 0
Applied rewrites64.8%
if 4.99999999999999976e-178 < (*.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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (* -0.5 K)))
(t_1 (* -1.0 (/ (* (fabs U) t_0) (fabs t_0))))
(t_2 (cos (/ K 2.0)))
(t_3
(*
(* (* -2.0 (fabs J)) t_2)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_2)) 2.0)))))
(t_4 (/ (fabs U) (fabs J))))
(*
(copysign 1.0 J)
(if (<= t_3 (- INFINITY))
t_1
(if (<= t_3 5e+307)
(*
(* (sqrt (- (/ (/ (* t_4 t_4) 4.0) (+ 0.5 0.5)) -1.0)) (fabs J))
(* t_0 -2.0))
t_1)))))double code(double J, double K, double U) {
double t_0 = cos((-0.5 * K));
double t_1 = -1.0 * ((fabs(U) * t_0) / fabs(t_0));
double t_2 = cos((K / 2.0));
double t_3 = ((-2.0 * fabs(J)) * t_2) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_2)), 2.0)));
double t_4 = fabs(U) / fabs(J);
double tmp;
if (t_3 <= -((double) INFINITY)) {
tmp = t_1;
} else if (t_3 <= 5e+307) {
tmp = (sqrt(((((t_4 * t_4) / 4.0) / (0.5 + 0.5)) - -1.0)) * fabs(J)) * (t_0 * -2.0);
} else {
tmp = t_1;
}
return copysign(1.0, J) * tmp;
}
public static double code(double J, double K, double U) {
double t_0 = Math.cos((-0.5 * K));
double t_1 = -1.0 * ((Math.abs(U) * t_0) / Math.abs(t_0));
double t_2 = Math.cos((K / 2.0));
double t_3 = ((-2.0 * Math.abs(J)) * t_2) * Math.sqrt((1.0 + Math.pow((Math.abs(U) / ((2.0 * Math.abs(J)) * t_2)), 2.0)));
double t_4 = Math.abs(U) / Math.abs(J);
double tmp;
if (t_3 <= -Double.POSITIVE_INFINITY) {
tmp = t_1;
} else if (t_3 <= 5e+307) {
tmp = (Math.sqrt(((((t_4 * t_4) / 4.0) / (0.5 + 0.5)) - -1.0)) * Math.abs(J)) * (t_0 * -2.0);
} else {
tmp = t_1;
}
return Math.copySign(1.0, J) * tmp;
}
def code(J, K, U): t_0 = math.cos((-0.5 * K)) t_1 = -1.0 * ((math.fabs(U) * t_0) / math.fabs(t_0)) t_2 = math.cos((K / 2.0)) t_3 = ((-2.0 * math.fabs(J)) * t_2) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((2.0 * math.fabs(J)) * t_2)), 2.0))) t_4 = math.fabs(U) / math.fabs(J) tmp = 0 if t_3 <= -math.inf: tmp = t_1 elif t_3 <= 5e+307: tmp = (math.sqrt(((((t_4 * t_4) / 4.0) / (0.5 + 0.5)) - -1.0)) * math.fabs(J)) * (t_0 * -2.0) else: tmp = t_1 return math.copysign(1.0, J) * tmp
function code(J, K, U) t_0 = cos(Float64(-0.5 * K)) t_1 = Float64(-1.0 * Float64(Float64(abs(U) * t_0) / abs(t_0))) t_2 = cos(Float64(K / 2.0)) t_3 = Float64(Float64(Float64(-2.0 * abs(J)) * t_2) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_2)) ^ 2.0)))) t_4 = Float64(abs(U) / abs(J)) tmp = 0.0 if (t_3 <= Float64(-Inf)) tmp = t_1; elseif (t_3 <= 5e+307) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(Float64(t_4 * t_4) / 4.0) / Float64(0.5 + 0.5)) - -1.0)) * abs(J)) * Float64(t_0 * -2.0)); else tmp = t_1; end return Float64(copysign(1.0, J) * tmp) end
function tmp_2 = code(J, K, U) t_0 = cos((-0.5 * K)); t_1 = -1.0 * ((abs(U) * t_0) / abs(t_0)); t_2 = cos((K / 2.0)); t_3 = ((-2.0 * abs(J)) * t_2) * sqrt((1.0 + ((abs(U) / ((2.0 * abs(J)) * t_2)) ^ 2.0))); t_4 = abs(U) / abs(J); tmp = 0.0; if (t_3 <= -Inf) tmp = t_1; elseif (t_3 <= 5e+307) tmp = (sqrt(((((t_4 * t_4) / 4.0) / (0.5 + 0.5)) - -1.0)) * abs(J)) * (t_0 * -2.0); else tmp = t_1; end tmp_2 = (sign(J) * abs(1.0)) * tmp; end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(-1.0 * N[(N[(N[Abs[U], $MachinePrecision] * t$95$0), $MachinePrecision] / N[Abs[t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$2), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$2), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$3, (-Infinity)], t$95$1, If[LessEqual[t$95$3, 5e+307], N[(N[(N[Sqrt[N[(N[(N[(N[(t$95$4 * t$95$4), $MachinePrecision] / 4.0), $MachinePrecision] / N[(0.5 + 0.5), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision]], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[(t$95$0 * -2.0), $MachinePrecision]), $MachinePrecision], t$95$1]]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := \cos \left(-0.5 \cdot K\right)\\
t_1 := -1 \cdot \frac{\left|U\right| \cdot t\_0}{\left|t\_0\right|}\\
t_2 := \cos \left(\frac{K}{2}\right)\\
t_3 := \left(\left(-2 \cdot \left|J\right|\right) \cdot t\_2\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_2}\right)}^{2}}\\
t_4 := \frac{\left|U\right|}{\left|J\right|}\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_3 \leq -\infty:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\sqrt{\frac{\frac{t\_4 \cdot t\_4}{4}}{0.5 + 0.5} - -1} \cdot \left|J\right|\right) \cdot \left(t\_0 \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\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.0 or 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Applied rewrites12.8%
Taylor expanded in J around -inf
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-fabs.f64N/A
lower-cos.f64N/A
lower-*.f6426.2%
Applied rewrites26.2%
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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
Taylor expanded in K around 0
Applied rewrites64.8%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_0)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_0)) 2.0))))
5e+307)
(*
(* (cosh (asinh (* 0.5 (/ (fabs U) (fabs J))))) (cos (* 0.5 K)))
(* (fabs J) -2.0))
(* 2.0 (* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0))))))))))double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_0) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_0)), 2.0)))) <= 5e+307) {
tmp = (cosh(asinh((0.5 * (fabs(U) / fabs(J))))) * cos((0.5 * K))) * (fabs(J) * -2.0);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
def code(J, K, U): t_0 = math.cos((K / 2.0)) tmp = 0 if (((-2.0 * math.fabs(J)) * t_0) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((2.0 * math.fabs(J)) * t_0)), 2.0)))) <= 5e+307: tmp = (math.cosh(math.asinh((0.5 * (math.fabs(U) / math.fabs(J))))) * math.cos((0.5 * K))) * (math.fabs(J) * -2.0) else: tmp = 2.0 * (math.fabs(J) * (math.fabs(U) * math.sqrt((0.25 / math.pow(math.fabs(J), 2.0))))) return math.copysign(1.0, J) * tmp
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_0) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_0)) ^ 2.0)))) <= 5e+307) tmp = Float64(Float64(cosh(asinh(Float64(0.5 * Float64(abs(U) / abs(J))))) * cos(Float64(0.5 * K))) * Float64(abs(J) * -2.0)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
function tmp_2 = code(J, K, U) t_0 = cos((K / 2.0)); tmp = 0.0; if ((((-2.0 * abs(J)) * t_0) * sqrt((1.0 + ((abs(U) / ((2.0 * abs(J)) * t_0)) ^ 2.0)))) <= 5e+307) tmp = (cosh(asinh((0.5 * (abs(U) / abs(J))))) * cos((0.5 * K))) * (abs(J) * -2.0); else tmp = 2.0 * (abs(J) * (abs(U) * sqrt((0.25 / (abs(J) ^ 2.0))))); end tmp_2 = (sign(J) * abs(1.0)) * tmp; end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 5e+307], N[(N[(N[Cosh[N[ArcSinh[N[(0.5 * N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * N[Cos[N[(0.5 * K), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(N[Abs[J], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_0}\right)}^{2}} \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\cosh \sinh^{-1} \left(0.5 \cdot \frac{\left|U\right|}{\left|J\right|}\right) \cdot \cos \left(0.5 \cdot K\right)\right) \cdot \left(\left|J\right| \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < 5e307Initial program 73.8%
lift-sqrt.f64N/A
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
unpow2N/A
cosh-asinh-revN/A
lower-cosh.f64N/A
lower-asinh.f6485.5%
lift-*.f64N/A
count-2-revN/A
lower-+.f6485.5%
lift-cos.f64N/A
cos-neg-revN/A
lower-cos.f64N/A
lift-/.f64N/A
distribute-neg-frac2N/A
metadata-evalN/A
mult-flip-revN/A
*-commutativeN/A
lower-*.f64N/A
metadata-eval85.5%
Applied rewrites85.5%
lift-/.f64N/A
lift-*.f64N/A
lift-+.f64N/A
count-2-revN/A
lift-*.f64N/A
associate-/r*N/A
lift-*.f64N/A
metadata-evalN/A
distribute-lft-neg-outN/A
lift-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
metadata-evalN/A
mult-flipN/A
lift-/.f64N/A
lower-cos.f64N/A
lift-/.f64N/A
mult-flipN/A
metadata-evalN/A
*-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
cos-neg-revN/A
lift-cos.f64N/A
Applied rewrites85.6%
lift-*.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites85.5%
Taylor expanded in K around 0
lower-*.f64N/A
lower-/.f6472.0%
Applied rewrites72.0%
if 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (/ (fabs U) (fabs J))) (t_1 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_1)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_1)) 2.0))))
5e+307)
(*
(* (sqrt (- (/ (/ (* t_0 t_0) 4.0) (+ 0.5 0.5)) -1.0)) (fabs J))
(* (cos (* -0.5 K)) -2.0))
(* 2.0 (* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0))))))))))double code(double J, double K, double U) {
double t_0 = fabs(U) / fabs(J);
double t_1 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_1) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_1)), 2.0)))) <= 5e+307) {
tmp = (sqrt(((((t_0 * t_0) / 4.0) / (0.5 + 0.5)) - -1.0)) * fabs(J)) * (cos((-0.5 * K)) * -2.0);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
public static double code(double J, double K, double U) {
double t_0 = Math.abs(U) / Math.abs(J);
double t_1 = Math.cos((K / 2.0));
double tmp;
if ((((-2.0 * Math.abs(J)) * t_1) * Math.sqrt((1.0 + Math.pow((Math.abs(U) / ((2.0 * Math.abs(J)) * t_1)), 2.0)))) <= 5e+307) {
tmp = (Math.sqrt(((((t_0 * t_0) / 4.0) / (0.5 + 0.5)) - -1.0)) * Math.abs(J)) * (Math.cos((-0.5 * K)) * -2.0);
} else {
tmp = 2.0 * (Math.abs(J) * (Math.abs(U) * Math.sqrt((0.25 / Math.pow(Math.abs(J), 2.0)))));
}
return Math.copySign(1.0, J) * tmp;
}
def code(J, K, U): t_0 = math.fabs(U) / math.fabs(J) t_1 = math.cos((K / 2.0)) tmp = 0 if (((-2.0 * math.fabs(J)) * t_1) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((2.0 * math.fabs(J)) * t_1)), 2.0)))) <= 5e+307: tmp = (math.sqrt(((((t_0 * t_0) / 4.0) / (0.5 + 0.5)) - -1.0)) * math.fabs(J)) * (math.cos((-0.5 * K)) * -2.0) else: tmp = 2.0 * (math.fabs(J) * (math.fabs(U) * math.sqrt((0.25 / math.pow(math.fabs(J), 2.0))))) return math.copysign(1.0, J) * tmp
function code(J, K, U) t_0 = Float64(abs(U) / abs(J)) t_1 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_1) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_1)) ^ 2.0)))) <= 5e+307) tmp = Float64(Float64(sqrt(Float64(Float64(Float64(Float64(t_0 * t_0) / 4.0) / Float64(0.5 + 0.5)) - -1.0)) * abs(J)) * Float64(cos(Float64(-0.5 * K)) * -2.0)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
function tmp_2 = code(J, K, U) t_0 = abs(U) / abs(J); t_1 = cos((K / 2.0)); tmp = 0.0; if ((((-2.0 * abs(J)) * t_1) * sqrt((1.0 + ((abs(U) / ((2.0 * abs(J)) * t_1)) ^ 2.0)))) <= 5e+307) tmp = (sqrt(((((t_0 * t_0) / 4.0) / (0.5 + 0.5)) - -1.0)) * abs(J)) * (cos((-0.5 * K)) * -2.0); else tmp = 2.0 * (abs(J) * (abs(U) * sqrt((0.25 / (abs(J) ^ 2.0))))); end tmp_2 = (sign(J) * abs(1.0)) * tmp; end
code[J_, K_, U_] := Block[{t$95$0 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 5e+307], N[(N[(N[Sqrt[N[(N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] / 4.0), $MachinePrecision] / N[(0.5 + 0.5), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision]], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision] * N[(N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \frac{\left|U\right|}{\left|J\right|}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_1\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_1}\right)}^{2}} \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\sqrt{\frac{\frac{t\_0 \cdot t\_0}{4}}{0.5 + 0.5} - -1} \cdot \left|J\right|\right) \cdot \left(\cos \left(-0.5 \cdot K\right) \cdot -2\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
Taylor expanded in K around 0
Applied rewrites64.8%
if 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (/ (fabs U) (fabs J))) (t_1 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_1)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_1)) 2.0))))
5e+307)
(*
(* (* (cos (* -0.5 K)) -2.0) (sqrt (fma (* t_0 t_0) 0.25 1.0)))
(fabs J))
(* 2.0 (* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0))))))))))double code(double J, double K, double U) {
double t_0 = fabs(U) / fabs(J);
double t_1 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_1) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_1)), 2.0)))) <= 5e+307) {
tmp = ((cos((-0.5 * K)) * -2.0) * sqrt(fma((t_0 * t_0), 0.25, 1.0))) * fabs(J);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = Float64(abs(U) / abs(J)) t_1 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_1) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_1)) ^ 2.0)))) <= 5e+307) tmp = Float64(Float64(Float64(cos(Float64(-0.5 * K)) * -2.0) * sqrt(fma(Float64(t_0 * t_0), 0.25, 1.0))) * abs(J)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[(N[Abs[U], $MachinePrecision] / N[Abs[J], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 5e+307], N[(N[(N[(N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision] * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \frac{\left|U\right|}{\left|J\right|}\\
t_1 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_1\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_1}\right)}^{2}} \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(\left(\cos \left(-0.5 \cdot K\right) \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(t\_0 \cdot t\_0, 0.25, 1\right)}\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in K around 0
Applied rewrites57.1%
lift-*.f64N/A
lift-/.f64N/A
associate-*r/N/A
lift-*.f64N/A
times-fracN/A
lower-*.f64N/A
lower-/.f64N/A
lower-/.f6464.8%
Applied rewrites64.8%
if 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (/ K 2.0)))
(t_1
(*
(* (* -2.0 (fabs J)) t_0)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_0)) 2.0)))))
(t_2 (cos (* -0.5 K))))
(*
(copysign 1.0 J)
(if (<= t_1 -1e-62)
(*
(*
(* t_2 -2.0)
(sqrt (fma (* (fabs U) (/ (fabs U) (* (fabs J) (fabs J)))) 0.25 1.0)))
(fabs J))
(if (<= t_1 5e+307)
(* (* -2.0 t_2) (fabs J))
(*
2.0
(* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0)))))))))))double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
double t_1 = ((-2.0 * fabs(J)) * t_0) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_0)), 2.0)));
double t_2 = cos((-0.5 * K));
double tmp;
if (t_1 <= -1e-62) {
tmp = ((t_2 * -2.0) * sqrt(fma((fabs(U) * (fabs(U) / (fabs(J) * fabs(J)))), 0.25, 1.0))) * fabs(J);
} else if (t_1 <= 5e+307) {
tmp = (-2.0 * t_2) * fabs(J);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) t_1 = Float64(Float64(Float64(-2.0 * abs(J)) * t_0) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_0)) ^ 2.0)))) t_2 = cos(Float64(-0.5 * K)) tmp = 0.0 if (t_1 <= -1e-62) tmp = Float64(Float64(Float64(t_2 * -2.0) * sqrt(fma(Float64(abs(U) * Float64(abs(U) / Float64(abs(J) * abs(J)))), 0.25, 1.0))) * abs(J)); elseif (t_1 <= 5e+307) tmp = Float64(Float64(-2.0 * t_2) * abs(J)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$1, -1e-62], N[(N[(N[(t$95$2 * -2.0), $MachinePrecision] * N[Sqrt[N[(N[(N[Abs[U], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] / N[(N[Abs[J], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 5e+307], N[(N[(-2.0 * t$95$2), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]]]]
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
t_1 := \left(\left(-2 \cdot \left|J\right|\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_0}\right)}^{2}}\\
t_2 := \cos \left(-0.5 \cdot K\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-62}:\\
\;\;\;\;\left(\left(t\_2 \cdot -2\right) \cdot \sqrt{\mathsf{fma}\left(\left|U\right| \cdot \frac{\left|U\right|}{\left|J\right| \cdot \left|J\right|}, 0.25, 1\right)}\right) \cdot \left|J\right|\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(-2 \cdot t\_2\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < -1e-62Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in K around 0
Applied rewrites57.1%
if -1e-62 < (*.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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in J around inf
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f6452.4%
Applied rewrites52.4%
if 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_0)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_0)) 2.0))))
5e+307)
(* (* -2.0 (cos (* -0.5 K))) (fabs J))
(* 2.0 (* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0))))))))))double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_0) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_0)), 2.0)))) <= 5e+307) {
tmp = (-2.0 * cos((-0.5 * K))) * fabs(J);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
public static double code(double J, double K, double U) {
double t_0 = Math.cos((K / 2.0));
double tmp;
if ((((-2.0 * Math.abs(J)) * t_0) * Math.sqrt((1.0 + Math.pow((Math.abs(U) / ((2.0 * Math.abs(J)) * t_0)), 2.0)))) <= 5e+307) {
tmp = (-2.0 * Math.cos((-0.5 * K))) * Math.abs(J);
} else {
tmp = 2.0 * (Math.abs(J) * (Math.abs(U) * Math.sqrt((0.25 / Math.pow(Math.abs(J), 2.0)))));
}
return Math.copySign(1.0, J) * tmp;
}
def code(J, K, U): t_0 = math.cos((K / 2.0)) tmp = 0 if (((-2.0 * math.fabs(J)) * t_0) * math.sqrt((1.0 + math.pow((math.fabs(U) / ((2.0 * math.fabs(J)) * t_0)), 2.0)))) <= 5e+307: tmp = (-2.0 * math.cos((-0.5 * K))) * math.fabs(J) else: tmp = 2.0 * (math.fabs(J) * (math.fabs(U) * math.sqrt((0.25 / math.pow(math.fabs(J), 2.0))))) return math.copysign(1.0, J) * tmp
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_0) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_0)) ^ 2.0)))) <= 5e+307) tmp = Float64(Float64(-2.0 * cos(Float64(-0.5 * K))) * abs(J)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
function tmp_2 = code(J, K, U) t_0 = cos((K / 2.0)); tmp = 0.0; if ((((-2.0 * abs(J)) * t_0) * sqrt((1.0 + ((abs(U) / ((2.0 * abs(J)) * t_0)) ^ 2.0)))) <= 5e+307) tmp = (-2.0 * cos((-0.5 * K))) * abs(J); else tmp = 2.0 * (abs(J) * (abs(U) * sqrt((0.25 / (abs(J) ^ 2.0))))); end tmp_2 = (sign(J) * abs(1.0)) * tmp; end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 5e+307], N[(N[(-2.0 * N[Cos[N[(-0.5 * K), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_0}\right)}^{2}} \leq 5 \cdot 10^{+307}:\\
\;\;\;\;\left(-2 \cdot \cos \left(-0.5 \cdot K\right)\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < 5e307Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in J around inf
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f6452.4%
Applied rewrites52.4%
if 5e307 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_0)
(sqrt (+ 1.0 (pow (/ (fabs U) (* (* 2.0 (fabs J)) t_0)) 2.0))))
-1e-282)
(*
(*
-2.0
(sqrt (fma (* (fabs U) (/ (fabs U) (* (fabs J) (fabs J)))) 0.25 1.0)))
(fabs J))
(* 2.0 (* (fabs J) (* (fabs U) (sqrt (/ 0.25 (pow (fabs J) 2.0))))))))))double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_0) * sqrt((1.0 + pow((fabs(U) / ((2.0 * fabs(J)) * t_0)), 2.0)))) <= -1e-282) {
tmp = (-2.0 * sqrt(fma((fabs(U) * (fabs(U) / (fabs(J) * fabs(J)))), 0.25, 1.0))) * fabs(J);
} else {
tmp = 2.0 * (fabs(J) * (fabs(U) * sqrt((0.25 / pow(fabs(J), 2.0)))));
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_0) * sqrt(Float64(1.0 + (Float64(abs(U) / Float64(Float64(2.0 * abs(J)) * t_0)) ^ 2.0)))) <= -1e-282) tmp = Float64(Float64(-2.0 * sqrt(fma(Float64(abs(U) * Float64(abs(U) / Float64(abs(J) * abs(J)))), 0.25, 1.0))) * abs(J)); else tmp = Float64(2.0 * Float64(abs(J) * Float64(abs(U) * sqrt(Float64(0.25 / (abs(J) ^ 2.0)))))); end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(N[Abs[U], $MachinePrecision] / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -1e-282], N[(N[(-2.0 * N[Sqrt[N[(N[(N[Abs[U], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] / N[(N[Abs[J], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Abs[J], $MachinePrecision] * N[(N[Abs[U], $MachinePrecision] * N[Sqrt[N[(0.25 / N[Power[N[Abs[J], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{\left|U\right|}{\left(2 \cdot \left|J\right|\right) \cdot t\_0}\right)}^{2}} \leq -1 \cdot 10^{-282}:\\
\;\;\;\;\left(-2 \cdot \sqrt{\mathsf{fma}\left(\left|U\right| \cdot \frac{\left|U\right|}{\left|J\right| \cdot \left|J\right|}, 0.25, 1\right)}\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left|J\right| \cdot \left(\left|U\right| \cdot \sqrt{\frac{0.25}{{\left(\left|J\right|\right)}^{2}}}\right)\right)\\
\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))))) < -1e-282Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in K around 0
Applied rewrites57.1%
Taylor expanded in K around 0
Applied rewrites37.4%
if -1e-282 < (*.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 73.8%
Taylor expanded in U around -inf
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-cos.f64N/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
Applied rewrites13.4%
Taylor expanded in K around 0
lower-sqrt.f64N/A
lower-/.f64N/A
lower-pow.f6413.4%
Applied rewrites13.4%
(FPCore (J K U)
:precision binary64
(let* ((t_0 (cos (/ K 2.0))))
(*
(copysign 1.0 J)
(if (<=
(*
(* (* -2.0 (fabs J)) t_0)
(sqrt (+ 1.0 (pow (/ U (* (* 2.0 (fabs J)) t_0)) 2.0))))
-5e-163)
(*
(* -2.0 (sqrt (fma (* U (/ U (* (fabs J) (fabs J)))) 0.25 1.0)))
(fabs J))
(* (fma (* (* 0.25 (fabs J)) K) K (* (fabs J) -2.0)) 1.0)))))double code(double J, double K, double U) {
double t_0 = cos((K / 2.0));
double tmp;
if ((((-2.0 * fabs(J)) * t_0) * sqrt((1.0 + pow((U / ((2.0 * fabs(J)) * t_0)), 2.0)))) <= -5e-163) {
tmp = (-2.0 * sqrt(fma((U * (U / (fabs(J) * fabs(J)))), 0.25, 1.0))) * fabs(J);
} else {
tmp = fma(((0.25 * fabs(J)) * K), K, (fabs(J) * -2.0)) * 1.0;
}
return copysign(1.0, J) * tmp;
}
function code(J, K, U) t_0 = cos(Float64(K / 2.0)) tmp = 0.0 if (Float64(Float64(Float64(-2.0 * abs(J)) * t_0) * sqrt(Float64(1.0 + (Float64(U / Float64(Float64(2.0 * abs(J)) * t_0)) ^ 2.0)))) <= -5e-163) tmp = Float64(Float64(-2.0 * sqrt(fma(Float64(U * Float64(U / Float64(abs(J) * abs(J)))), 0.25, 1.0))) * abs(J)); else tmp = Float64(fma(Float64(Float64(0.25 * abs(J)) * K), K, Float64(abs(J) * -2.0)) * 1.0); end return Float64(copysign(1.0, J) * tmp) end
code[J_, K_, U_] := Block[{t$95$0 = N[Cos[N[(K / 2.0), $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[J]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[(-2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision] * N[Sqrt[N[(1.0 + N[Power[N[(U / N[(N[(2.0 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -5e-163], N[(N[(-2.0 * N[Sqrt[N[(N[(U * N[(U / N[(N[Abs[J], $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.25 + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Abs[J], $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(0.25 * N[Abs[J], $MachinePrecision]), $MachinePrecision] * K), $MachinePrecision] * K + N[(N[Abs[J], $MachinePrecision] * -2.0), $MachinePrecision]), $MachinePrecision] * 1.0), $MachinePrecision]]), $MachinePrecision]]
\begin{array}{l}
t_0 := \cos \left(\frac{K}{2}\right)\\
\mathsf{copysign}\left(1, J\right) \cdot \begin{array}{l}
\mathbf{if}\;\left(\left(-2 \cdot \left|J\right|\right) \cdot t\_0\right) \cdot \sqrt{1 + {\left(\frac{U}{\left(2 \cdot \left|J\right|\right) \cdot t\_0}\right)}^{2}} \leq -5 \cdot 10^{-163}:\\
\;\;\;\;\left(-2 \cdot \sqrt{\mathsf{fma}\left(U \cdot \frac{U}{\left|J\right| \cdot \left|J\right|}, 0.25, 1\right)}\right) \cdot \left|J\right|\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(0.25 \cdot \left|J\right|\right) \cdot K, K, \left|J\right| \cdot -2\right) \cdot 1\\
\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))))) < -4.99999999999999977e-163Initial program 73.8%
Applied rewrites73.6%
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites62.5%
Taylor expanded in K around 0
Applied rewrites57.1%
Taylor expanded in K around 0
Applied rewrites37.4%
if -4.99999999999999977e-163 < (*.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 73.8%
Taylor expanded in J around inf
Applied rewrites52.4%
Taylor expanded in K around 0
lower-fma.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-pow.f6427.4%
Applied rewrites27.4%
lift-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lift-*.f64N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6427.4%
Applied rewrites27.4%
(FPCore (J K U) :precision binary64 (* (fma (* (* 0.25 J) K) K (* J -2.0)) 1.0))
double code(double J, double K, double U) {
return fma(((0.25 * J) * K), K, (J * -2.0)) * 1.0;
}
function code(J, K, U) return Float64(fma(Float64(Float64(0.25 * J) * K), K, Float64(J * -2.0)) * 1.0) end
code[J_, K_, U_] := N[(N[(N[(N[(0.25 * J), $MachinePrecision] * K), $MachinePrecision] * K + N[(J * -2.0), $MachinePrecision]), $MachinePrecision] * 1.0), $MachinePrecision]
\mathsf{fma}\left(\left(0.25 \cdot J\right) \cdot K, K, J \cdot -2\right) \cdot 1
Initial program 73.8%
Taylor expanded in J around inf
Applied rewrites52.4%
Taylor expanded in K around 0
lower-fma.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-pow.f6427.4%
Applied rewrites27.4%
lift-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lift-*.f64N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6427.4%
Applied rewrites27.4%
herbie shell --seed 2025183
(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)))))