mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-17 18:18:04 +00:00
[CodeFactor] Apply fixes to commit 9697fac
This commit is contained in:
@@ -59,7 +59,7 @@ public sealed class Bwma : AbstractBase
|
||||
|
||||
_period = period;
|
||||
_order = order;
|
||||
_power = order * 0.5 + 0.5;
|
||||
_power = (order * 0.5) + 0.5;
|
||||
_buffer = new RingBuffer(period);
|
||||
_weights = new double[period];
|
||||
Name = $"Bwma({period}, {order})";
|
||||
@@ -101,12 +101,12 @@ public sealed class Bwma : AbstractBase
|
||||
{
|
||||
double sum = 0;
|
||||
double scale = period > 1 ? 2.0 / (period - 1) : 0.0;
|
||||
double power = order * 0.5 + 0.5;
|
||||
double power = (order * 0.5) + 0.5;
|
||||
|
||||
for (int i = 0; i < period; i++)
|
||||
{
|
||||
double x = period > 1 ? i * scale - 1.0 : 0.0;
|
||||
double arg = 1.0 - x * x;
|
||||
double x = period > 1 ? (i * scale) - 1.0 : 0.0;
|
||||
double arg = 1.0 - (x * x);
|
||||
|
||||
double w;
|
||||
if (arg > 0.0)
|
||||
@@ -366,7 +366,7 @@ public sealed class Bwma : AbstractBase
|
||||
return;
|
||||
}
|
||||
|
||||
double power = order * 0.5 + 0.5;
|
||||
double power = (order * 0.5) + 0.5;
|
||||
|
||||
if (period > len)
|
||||
{
|
||||
|
||||
@@ -120,10 +120,10 @@ public sealed class Crma : AbstractBase
|
||||
{
|
||||
// Find pivot row
|
||||
int pivotRow = col;
|
||||
double pivotMax = Math.Abs(m[col * 5 + col]);
|
||||
double pivotMax = Math.Abs(m[(col * 5) + col]);
|
||||
for (int row = col + 1; row < 4; row++)
|
||||
{
|
||||
double absVal = Math.Abs(m[row * 5 + col]);
|
||||
double absVal = Math.Abs(m[(row * 5) + col]);
|
||||
if (absVal > pivotMax)
|
||||
{
|
||||
pivotMax = absVal;
|
||||
@@ -148,13 +148,13 @@ public sealed class Crma : AbstractBase
|
||||
}
|
||||
|
||||
// Eliminate below
|
||||
double diag = m[col * 5 + col];
|
||||
double diag = m[(col * 5) + col];
|
||||
for (int row = col + 1; row < 4; row++)
|
||||
{
|
||||
double factor = m[row * 5 + col] / diag;
|
||||
double factor = m[(row * 5) + col] / diag;
|
||||
for (int k = col; k < 5; k++)
|
||||
{
|
||||
m[row * 5 + k] = Math.FusedMultiplyAdd(-factor, m[col * 5 + k], m[row * 5 + k]);
|
||||
m[(row * 5) + k] = Math.FusedMultiplyAdd(-factor, m[(col * 5) + k], m[(row * 5) + k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,12 +163,12 @@ public sealed class Crma : AbstractBase
|
||||
Span<double> a = stackalloc double[4];
|
||||
for (int row = 3; row >= 0; row--)
|
||||
{
|
||||
double val = m[row * 5 + 4];
|
||||
double val = m[(row * 5) + 4];
|
||||
for (int k = row + 1; k < 4; k++)
|
||||
{
|
||||
val = Math.FusedMultiplyAdd(-m[row * 5 + k], a[k], val);
|
||||
val = Math.FusedMultiplyAdd(-m[(row * 5) + k], a[k], val);
|
||||
}
|
||||
a[row] = val / m[row * 5 + row];
|
||||
a[row] = val / m[(row * 5) + row];
|
||||
}
|
||||
|
||||
return a[0]; // Fitted value at x=0 (newest bar)
|
||||
|
||||
@@ -109,7 +109,7 @@ public sealed class Hamma : AbstractBase
|
||||
double twoPiOverPm1 = 2.0 * Math.PI / (period - 1);
|
||||
for (int i = 0; i < period; i++)
|
||||
{
|
||||
double w = 0.54 - 0.46 * Math.Cos(twoPiOverPm1 * i);
|
||||
double w = 0.54 - (0.46 * Math.Cos(twoPiOverPm1 * i));
|
||||
weights[i] = w;
|
||||
sum += w;
|
||||
}
|
||||
|
||||
@@ -80,14 +80,14 @@ public sealed class Hend : AbstractBase
|
||||
double n2 = n * n;
|
||||
double nm1_2 = (n - 1) * (n - 1);
|
||||
double np1_2 = (n + 1) * (n + 1);
|
||||
double denom = 8.0 * n * (n2 - 1) * (4 * n2 - 1) * (4 * n2 - 9) * (4 * n2 - 25);
|
||||
double denom = 8.0 * n * (n2 - 1) * ((4 * n2) - 1) * ((4 * n2) - 9) * ((4 * n2) - 25);
|
||||
|
||||
double wsum = 0.0;
|
||||
for (int i = 0; i < period; i++)
|
||||
{
|
||||
int k = i - half;
|
||||
double k2 = (double)(k * k);
|
||||
double w = 315.0 * (nm1_2 - k2) * (n2 - k2) * (np1_2 - k2) * (3 * n2 - 16 - 11 * k2) / denom;
|
||||
double w = 315.0 * (nm1_2 - k2) * (n2 - k2) * (np1_2 - k2) * ((3 * n2) - 16 - (11 * k2)) / denom;
|
||||
weights[i] = w;
|
||||
wsum += w;
|
||||
}
|
||||
|
||||
@@ -63,8 +63,8 @@ public sealed class Ilrs : AbstractBase
|
||||
|
||||
// Precompute constants (reversed-x convention: x=0=newest, x=n-1=oldest)
|
||||
_sumX = 0.5 * period * (period - 1);
|
||||
double sumX2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
_denominator = period * sumX2 - _sumX * _sumX;
|
||||
double sumX2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
_denominator = (period * sumX2) - (_sumX * _sumX);
|
||||
_s.LastValidValue = double.NaN;
|
||||
}
|
||||
|
||||
@@ -239,8 +239,8 @@ public sealed class Ilrs : AbstractBase
|
||||
{
|
||||
double nd = n;
|
||||
sx = 0.5 * nd * (nd - 1);
|
||||
double sx2 = (nd - 1.0) * nd * (2.0 * nd - 1.0) / 6.0;
|
||||
denom = nd * sx2 - sx * sx;
|
||||
double sx2 = (nd - 1.0) * nd * ((2.0 * nd) - 1.0) / 6.0;
|
||||
denom = (nd * sx2) - (sx * sx);
|
||||
}
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
@@ -305,8 +305,8 @@ public sealed class Ilrs : AbstractBase
|
||||
|
||||
// Precalculate constants for full period
|
||||
double fullSumX = 0.5 * period * (period - 1);
|
||||
double fullSumX2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double fullDenom = period * fullSumX2 - fullSumX * fullSumX;
|
||||
double fullSumX2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
double fullDenom = (period * fullSumX2) - (fullSumX * fullSumX);
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
@@ -345,8 +345,8 @@ public sealed class Ilrs : AbstractBase
|
||||
{
|
||||
double n = count;
|
||||
double sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
double denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
double denom = (n * sx2) - (sx * sx);
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
{
|
||||
|
||||
@@ -105,7 +105,7 @@ public sealed class Kaiser : AbstractBase
|
||||
for (int k = 0; k < period; k++)
|
||||
{
|
||||
double t = nm1 > 0 ? (2.0 * k / nm1) - 1.0 : 0.0;
|
||||
double argSq = 1.0 - t * t;
|
||||
double argSq = 1.0 - (t * t);
|
||||
double arg = argSq > 0 ? Math.Sqrt(argSq) : 0.0;
|
||||
double w = i0Beta > 0 ? BesselI0(beta * arg) / i0Beta : 1.0;
|
||||
weights[k] = w;
|
||||
|
||||
@@ -61,10 +61,10 @@ public sealed class Lsma : AbstractBase
|
||||
_sum_x = 0.5 * period * (period - 1);
|
||||
|
||||
// sum_x2 = 0^2 + ... + (n-1)^2 = (n-1)n(2n-1)/6
|
||||
double sum_x2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double sum_x2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
|
||||
// denominator = n * sum_x2 - sum_x^2
|
||||
_denominator = period * sum_x2 - _sum_x * _sum_x;
|
||||
_denominator = (period * sum_x2) - (_sum_x * _sum_x);
|
||||
_state.LastValidValue = double.NaN;
|
||||
}
|
||||
|
||||
@@ -177,8 +177,8 @@ public sealed class Lsma : AbstractBase
|
||||
{
|
||||
// Recalculate constants for smaller n
|
||||
sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
denom = (n * sx2) - (sx * sx);
|
||||
}
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
@@ -309,8 +309,8 @@ public sealed class Lsma : AbstractBase
|
||||
|
||||
// Precalculate constants for full period
|
||||
double full_sum_x = 0.5 * period * (period - 1);
|
||||
double full_sum_x2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double full_denom = period * full_sum_x2 - full_sum_x * full_sum_x;
|
||||
double full_sum_x2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
double full_denom = (period * full_sum_x2) - (full_sum_x * full_sum_x);
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
@@ -346,8 +346,8 @@ public sealed class Lsma : AbstractBase
|
||||
{
|
||||
double n = count;
|
||||
double sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
double denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
double denom = (n * sx2) - (sx * sx);
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ public sealed class Parzen : AbstractBase
|
||||
if (absU <= 0.5)
|
||||
{
|
||||
// Inner region: cubic spline
|
||||
w = Math.FusedMultiplyAdd(6.0, absU * absU * absU, 1.0 - 6.0 * absU * absU);
|
||||
w = Math.FusedMultiplyAdd(6.0, absU * absU * absU, 1.0 - (6.0 * absU * absU));
|
||||
}
|
||||
else if (absU <= 1.0)
|
||||
{
|
||||
|
||||
@@ -36,7 +36,7 @@ public sealed class Pwma : AbstractBase
|
||||
}
|
||||
|
||||
_period = period;
|
||||
_divisor = (double)period * ((double)period + 1.0) * (2.0 * (double)period + 1.0) / 6.0;
|
||||
_divisor = (double)period * ((double)period + 1.0) * ((2.0 * (double)period) + 1.0) / 6.0;
|
||||
_buffer = new RingBuffer(period);
|
||||
Name = $"Pwma({period})";
|
||||
WarmupPeriod = period;
|
||||
@@ -91,7 +91,7 @@ public sealed class Pwma : AbstractBase
|
||||
_state.WSum = tW;
|
||||
|
||||
// Kahan compensated update for PSum: psum += (period² * val - 2 * oldWSum + oldSum)
|
||||
double deltaP = Math.FusedMultiplyAdd((double)_period * _period, val, -2 * oldWSum + oldSum);
|
||||
double deltaP = Math.FusedMultiplyAdd((double)_period * _period, val, (-2 * oldWSum) + oldSum);
|
||||
double yP = deltaP - _state.PSumComp;
|
||||
double tP = _state.PSum + yP;
|
||||
_state.PSumComp = (tP - _state.PSum) - yP;
|
||||
@@ -166,7 +166,7 @@ public sealed class Pwma : AbstractBase
|
||||
}
|
||||
|
||||
double count = _buffer.Count;
|
||||
double currentDivisor = _buffer.IsFull ? _divisor : count * (count + 1.0) * (2.0 * count + 1.0) / 6.0;
|
||||
double currentDivisor = _buffer.IsFull ? _divisor : count * (count + 1.0) * ((2.0 * count) + 1.0) / 6.0;
|
||||
Last = new TValue(input.Time, _state.PSum / currentDivisor);
|
||||
PubEvent(Last, isNew);
|
||||
return Last;
|
||||
@@ -281,7 +281,7 @@ public sealed class Pwma : AbstractBase
|
||||
private static void CalculateScalarCore(ReadOnlySpan<double> source, Span<double> output, int period)
|
||||
{
|
||||
int len = source.Length;
|
||||
double divisor = (double)period * ((double)period + 1.0) * (2.0 * (double)period + 1.0) / 6.0;
|
||||
double divisor = (double)period * ((double)period + 1.0) * ((2.0 * (double)period) + 1.0) / 6.0;
|
||||
double sum = 0;
|
||||
double wsum = 0;
|
||||
double psum = 0;
|
||||
@@ -330,7 +330,7 @@ public sealed class Pwma : AbstractBase
|
||||
|
||||
buffer[i] = val;
|
||||
|
||||
double currentDivisor = ((double)i + 1.0) * ((double)i + 2.0) * (2.0 * ((double)i + 1.0) + 1.0) / 6.0;
|
||||
double currentDivisor = ((double)i + 1.0) * ((double)i + 2.0) * ((2.0 * ((double)i + 1.0)) + 1.0) / 6.0;
|
||||
output[i] = psum / currentDivisor;
|
||||
}
|
||||
|
||||
@@ -366,7 +366,7 @@ public sealed class Pwma : AbstractBase
|
||||
wsum = tW;
|
||||
|
||||
// Kahan compensated update for PSum: psum += (period² * val - 2 * oldWSum + oldSum)
|
||||
double deltaP = Math.FusedMultiplyAdd((double)period * period, val, -2 * oldWSum + oldSum);
|
||||
double deltaP = Math.FusedMultiplyAdd((double)period * period, val, (-2 * oldWSum) + oldSum);
|
||||
double yP = deltaP - psumComp;
|
||||
double tP = psum + yP;
|
||||
psumComp = (tP - psum) - yP;
|
||||
|
||||
+14
-14
@@ -86,9 +86,9 @@ public sealed class Qrma : AbstractBase
|
||||
|
||||
// Faulhaber closed-form power sums (O(1))
|
||||
double s1 = n * (n - 1.0) * 0.5; // Σx
|
||||
double s2 = n * (n - 1.0) * (2.0 * n - 1.0) / 6.0; // Σx²
|
||||
double s2 = n * (n - 1.0) * ((2.0 * n) - 1.0) / 6.0; // Σx²
|
||||
double s3 = s1 * s1; // Σx³ = [N(N-1)/2]²
|
||||
double s4 = n * (n - 1.0) * (2.0 * n - 1.0) * Math.FusedMultiplyAdd(3.0 * n, n - 1.0, -1.0) / 30.0; // Σx⁴
|
||||
double s4 = n * (n - 1.0) * ((2.0 * n) - 1.0) * Math.FusedMultiplyAdd(3.0 * n, n - 1.0, -1.0) / 30.0; // Σx⁴
|
||||
|
||||
// Cross-products in O(N)
|
||||
double r0 = 0, r1 = 0, r2 = 0;
|
||||
@@ -109,9 +109,9 @@ public sealed class Qrma : AbstractBase
|
||||
// [ S2 S3 S4 ] [c] [r2]
|
||||
|
||||
// Cramer's rule: det of coefficient matrix
|
||||
double det = Math.FusedMultiplyAdd(n, s2 * s4 - s3 * s3,
|
||||
Math.FusedMultiplyAdd(-s1, s1 * s4 - s3 * s2,
|
||||
s2 * (s1 * s3 - s2 * s2)));
|
||||
double det = Math.FusedMultiplyAdd(n, (s2 * s4) - (s3 * s3),
|
||||
Math.FusedMultiplyAdd(-s1, (s1 * s4) - (s3 * s2),
|
||||
s2 * ((s1 * s3) - (s2 * s2))));
|
||||
|
||||
if (Math.Abs(det) < 1e-20)
|
||||
{
|
||||
@@ -121,19 +121,19 @@ public sealed class Qrma : AbstractBase
|
||||
double invDet = 1.0 / det;
|
||||
|
||||
// det_a: replace column 0 with [r0, r1, r2]
|
||||
double detA = Math.FusedMultiplyAdd(r0, s2 * s4 - s3 * s3,
|
||||
Math.FusedMultiplyAdd(-s1, r1 * s4 - r2 * s3,
|
||||
s2 * (r1 * s3 - r2 * s2)));
|
||||
double detA = Math.FusedMultiplyAdd(r0, (s2 * s4) - (s3 * s3),
|
||||
Math.FusedMultiplyAdd(-s1, (r1 * s4) - (r2 * s3),
|
||||
s2 * ((r1 * s3) - (r2 * s2))));
|
||||
|
||||
// det_b: replace column 1 with [r0, r1, r2]
|
||||
double detB = Math.FusedMultiplyAdd(n, r1 * s4 - r2 * s3,
|
||||
Math.FusedMultiplyAdd(-r0, s1 * s4 - s3 * s2,
|
||||
s2 * (s1 * r2 - s2 * r1)));
|
||||
double detB = Math.FusedMultiplyAdd(n, (r1 * s4) - (r2 * s3),
|
||||
Math.FusedMultiplyAdd(-r0, (s1 * s4) - (s3 * s2),
|
||||
s2 * ((s1 * r2) - (s2 * r1))));
|
||||
|
||||
// det_c: replace column 2 with [r0, r1, r2]
|
||||
double detC = Math.FusedMultiplyAdd(n, s2 * r2 - s3 * r1,
|
||||
Math.FusedMultiplyAdd(-s1, s1 * r2 - s2 * r1,
|
||||
r0 * (s1 * s3 - s2 * s2)));
|
||||
double detC = Math.FusedMultiplyAdd(n, (s2 * r2) - (s3 * r1),
|
||||
Math.FusedMultiplyAdd(-s1, (s1 * r2) - (s2 * r1),
|
||||
r0 * ((s1 * s3) - (s2 * s2))));
|
||||
|
||||
double a = detA * invDet;
|
||||
double b = detB * invDet;
|
||||
|
||||
@@ -146,10 +146,10 @@ public sealed class Sgma : AbstractBase
|
||||
{
|
||||
0 => 1.0,
|
||||
1 => 1.0 - Math.Abs(normX),
|
||||
2 => 1.0 - normX * normX,
|
||||
2 => 1.0 - (normX * normX),
|
||||
3 => 1.0 - Math.Abs(normX * normX * normX),
|
||||
4 => 1.0 - normX * normX * normX * normX,
|
||||
_ => 1.0 - normX * normX
|
||||
4 => 1.0 - (normX * normX * normX * normX),
|
||||
_ => 1.0 - (normX * normX)
|
||||
};
|
||||
|
||||
weights[i] = w;
|
||||
@@ -549,10 +549,10 @@ public sealed class Sgma : AbstractBase
|
||||
{
|
||||
0 => 1.0,
|
||||
1 => 1.0 - Math.Abs(normX),
|
||||
2 => 1.0 - normX * normX,
|
||||
2 => 1.0 - (normX * normX),
|
||||
3 => 1.0 - Math.Abs(normX * normX * normX),
|
||||
4 => 1.0 - normX * normX * normX * normX,
|
||||
_ => 1.0 - normX * normX
|
||||
4 => 1.0 - (normX * normX * normX * normX),
|
||||
_ => 1.0 - (normX * normX)
|
||||
};
|
||||
|
||||
sum2 = Math.FusedMultiplyAdd(window[i], w, sum2);
|
||||
|
||||
@@ -450,7 +450,7 @@ public sealed class Sma : AbstractBase
|
||||
}
|
||||
|
||||
var vInvPeriod = Vector512.Create(invPeriod);
|
||||
int simdEnd = period + (len - period) / VectorWidth * VectorWidth;
|
||||
int simdEnd = period + ((len - period) / VectorWidth * VectorWidth);
|
||||
|
||||
for (int i = period; i < simdEnd; i += VectorWidth)
|
||||
{
|
||||
@@ -517,7 +517,7 @@ public sealed class Sma : AbstractBase
|
||||
|
||||
var vInvPeriod = Vector256.Create(invPeriod);
|
||||
var vZero = Vector256<double>.Zero;
|
||||
int simdEnd = period + (len - period) / VectorWidth * VectorWidth;
|
||||
int simdEnd = period + ((len - period) / VectorWidth * VectorWidth);
|
||||
|
||||
for (int i = period; i < simdEnd; i += VectorWidth)
|
||||
{
|
||||
@@ -581,7 +581,7 @@ public sealed class Sma : AbstractBase
|
||||
}
|
||||
|
||||
var vInvPeriod = Vector128.Create(invPeriod);
|
||||
int simdEnd = period + (len - period) / VectorWidth * VectorWidth;
|
||||
int simdEnd = period + ((len - period) / VectorWidth * VectorWidth);
|
||||
|
||||
for (int i = period; i < simdEnd; i += VectorWidth)
|
||||
{
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class Trima : AbstractBase
|
||||
|
||||
_period = period;
|
||||
int p1 = (period + 1) / 2;
|
||||
int p2 = period / 2 + 1;
|
||||
int p2 = (period / 2) + 1;
|
||||
|
||||
_sma1 = new Sma(p1);
|
||||
_sma2 = new Sma(p2);
|
||||
@@ -150,7 +150,7 @@ public sealed class Trima : AbstractBase
|
||||
}
|
||||
|
||||
int p1 = (period + 1) / 2;
|
||||
int p2 = period / 2 + 1;
|
||||
int p2 = (period / 2) + 1;
|
||||
|
||||
double[] tempArray = ArrayPool<double>.Shared.Rent(source.Length);
|
||||
Span<double> tempSpan = tempArray.AsSpan(0, source.Length);
|
||||
|
||||
@@ -62,10 +62,10 @@ public sealed class Tsf : AbstractBase
|
||||
_sumX = 0.5 * period * (period - 1);
|
||||
|
||||
// sumX2 = 0^2 + ... + (n-1)^2 = (n-1)n(2n-1)/6
|
||||
double sumX2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double sumX2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
|
||||
// denominator = n * sumX2 - sumX^2
|
||||
_denominator = period * sumX2 - _sumX * _sumX;
|
||||
_denominator = (period * sumX2) - (_sumX * _sumX);
|
||||
_s.LastValidValue = double.NaN;
|
||||
}
|
||||
|
||||
@@ -175,8 +175,8 @@ public sealed class Tsf : AbstractBase
|
||||
{
|
||||
// Recalculate constants for smaller n during warmup
|
||||
sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
denom = (n * sx2) - (sx * sx);
|
||||
}
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
@@ -310,8 +310,8 @@ public sealed class Tsf : AbstractBase
|
||||
|
||||
// Precalculate constants for full period
|
||||
double fullSumX = 0.5 * period * (period - 1);
|
||||
double fullSumX2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double fullDenom = period * fullSumX2 - fullSumX * fullSumX;
|
||||
double fullSumX2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
double fullDenom = (period * fullSumX2) - (fullSumX * fullSumX);
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
@@ -345,8 +345,8 @@ public sealed class Tsf : AbstractBase
|
||||
{
|
||||
double n = count;
|
||||
double sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
double denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
double denom = (n * sx2) - (sx * sx);
|
||||
|
||||
if (Math.Abs(denom) < 1e-10)
|
||||
{
|
||||
|
||||
@@ -98,7 +98,7 @@ public sealed class Tukey_w : AbstractBase
|
||||
{
|
||||
w = 0.5 * (1.0 - Math.Cos(2.0 * Math.PI * i / aN));
|
||||
}
|
||||
else if (i > N - aN * 0.5)
|
||||
else if (i > N - (aN * 0.5))
|
||||
{
|
||||
w = 0.5 * (1.0 - Math.Cos(2.0 * Math.PI * (N - i) / aN));
|
||||
}
|
||||
|
||||
@@ -461,7 +461,7 @@ public sealed class Wma : AbstractBase
|
||||
|
||||
var vInvDivisor = Vector512.Create(invDivisor);
|
||||
var vPeriod = Vector512.Create((double)period);
|
||||
int simdEnd = period + (len - period) / vectorWidth * vectorWidth;
|
||||
int simdEnd = period + ((len - period) / vectorWidth * vectorWidth);
|
||||
|
||||
var vSumState = Vector512.Create(sum);
|
||||
var vWsumState = Vector512.Create(wsum);
|
||||
@@ -518,7 +518,7 @@ public sealed class Wma : AbstractBase
|
||||
double oldSum = sum;
|
||||
double oldest = Unsafe.Add(ref srcRef, idx - period);
|
||||
sum = sum - oldest + val;
|
||||
wsum = wsum - oldSum + period * val;
|
||||
wsum = wsum - oldSum + (period * val);
|
||||
Unsafe.Add(ref outRef, idx) = wsum * invDivisor;
|
||||
}
|
||||
}
|
||||
@@ -559,7 +559,7 @@ public sealed class Wma : AbstractBase
|
||||
var vInvDivisor = Vector256.Create(invDivisor);
|
||||
var vPeriod = Vector256.Create((double)period);
|
||||
var vZero = Vector256<double>.Zero;
|
||||
int simdEnd = period + ((len - period) / vectorWidth) * vectorWidth;
|
||||
int simdEnd = period + (((len - period) / vectorWidth) * vectorWidth);
|
||||
|
||||
var vSumState = Vector256.Create(sum);
|
||||
var vWsumState = Vector256.Create(wsum);
|
||||
@@ -708,7 +708,7 @@ public sealed class Wma : AbstractBase
|
||||
double oldSum = sum;
|
||||
double oldest = Unsafe.Add(ref srcRef, idx - period);
|
||||
sum = sum - oldest + val;
|
||||
wsum = wsum - oldSum + period * val;
|
||||
wsum = wsum - oldSum + (period * val);
|
||||
Unsafe.Add(ref outRef, idx) = wsum * invDivisor;
|
||||
}
|
||||
}
|
||||
@@ -747,7 +747,7 @@ public sealed class Wma : AbstractBase
|
||||
}
|
||||
|
||||
var vInvDivisor = Vector128.Create(invDivisor);
|
||||
int simdEnd = period + ((len - period) / vectorWidth) * vectorWidth;
|
||||
int simdEnd = period + (((len - period) / vectorWidth) * vectorWidth);
|
||||
|
||||
double sumState = sum;
|
||||
double wsumState = wsum;
|
||||
@@ -841,7 +841,7 @@ public sealed class Wma : AbstractBase
|
||||
double oldSum = sum;
|
||||
double oldest = Unsafe.Add(ref srcRef, idx - period);
|
||||
sum = sum - oldest + val;
|
||||
wsum = wsum - oldSum + period * val;
|
||||
wsum = wsum - oldSum + (period * val);
|
||||
Unsafe.Add(ref outRef, idx) = wsum * invDivisor;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user