mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-21 03:58:04 +00:00
feat(statistics): add Variance indicator with O(1) calculation and usage example
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
description: Configuration for AI behavior when interacting with Codacy's MCP Server
|
||||
applyTo: '**'
|
||||
description: Configuration for AI behavior when interacting with Codacy's MCP Server
|
||||
applyTo: '**'
|
||||
---
|
||||
---
|
||||
# Codacy Rules
|
||||
|
||||
+14
-14
@@ -97,7 +97,7 @@ public sealed class Lsma : AbstractBase
|
||||
|
||||
// O(1) update for sum_xy
|
||||
// sum_xy_new = sum_xy_old + sum_y_prev - n * oldest
|
||||
_state.SumXY = _state.SumXY + prev_sum_y - _period * oldest;
|
||||
_state.SumXY = Math.FusedMultiplyAdd(-_period, oldest, _state.SumXY + prev_sum_y);
|
||||
|
||||
// O(1) update for sum_y
|
||||
_state.SumY = _state.SumY - oldest + val;
|
||||
@@ -119,7 +119,7 @@ public sealed class Lsma : AbstractBase
|
||||
// index j in buffer corresponds to x = count - 1 - j
|
||||
// sum_xy = sum(x * y)
|
||||
int x = span.Length - 1 - i;
|
||||
_state.SumXY += x * span[i];
|
||||
_state.SumXY = Math.FusedMultiplyAdd(x, span[i], _state.SumXY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ public sealed class Lsma : AbstractBase
|
||||
for (int i = 0; i < span.Length; i++)
|
||||
{
|
||||
int x = span.Length - 1 - i;
|
||||
_state.SumXY += x * span[i];
|
||||
_state.SumXY = Math.FusedMultiplyAdd(x, span[i], _state.SumXY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,11 +197,11 @@ public sealed class Lsma : AbstractBase
|
||||
}
|
||||
else
|
||||
{
|
||||
double m = (n * _state.SumXY - sx * _state.SumY) / denom;
|
||||
double b = (_state.SumY - m * sx) / n;
|
||||
double m = Math.FusedMultiplyAdd(n, _state.SumXY, -sx * _state.SumY) / denom;
|
||||
double b = Math.FusedMultiplyAdd(-m, sx, _state.SumY) / n;
|
||||
|
||||
// LSMA = b - m * offset
|
||||
result = b - m * _offset;
|
||||
result = Math.FusedMultiplyAdd(-m, _offset, b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ public sealed class Lsma : AbstractBase
|
||||
{
|
||||
// buffer[j] is at index j
|
||||
// x = count - 1 - j
|
||||
sum_xy += (count - 1 - j) * buffer[j];
|
||||
sum_xy = Math.FusedMultiplyAdd(count - 1 - j, buffer[j], sum_xy);
|
||||
}
|
||||
|
||||
if (count <= 1)
|
||||
@@ -355,9 +355,9 @@ public sealed class Lsma : AbstractBase
|
||||
}
|
||||
else
|
||||
{
|
||||
double m = (n * sum_xy - sx * sum_y) / denom;
|
||||
double b = (sum_y - m * sx) / n;
|
||||
output[i] = b - m * offset;
|
||||
double m = Math.FusedMultiplyAdd(n, sum_xy, -sx * sum_y) / denom;
|
||||
double b = Math.FusedMultiplyAdd(-m, sx, sum_y) / n;
|
||||
output[i] = Math.FusedMultiplyAdd(-m, offset, b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ public sealed class Lsma : AbstractBase
|
||||
double prev_sum_y = sum_y;
|
||||
|
||||
// sum_xy_new = sum_xy_old + sum_y_prev - n * oldest
|
||||
sum_xy = sum_xy + prev_sum_y - period * oldest;
|
||||
sum_xy = Math.FusedMultiplyAdd(-period, oldest, sum_xy + prev_sum_y);
|
||||
|
||||
sum_y = sum_y - oldest + val;
|
||||
buffer[bufferIndex] = val;
|
||||
@@ -382,9 +382,9 @@ public sealed class Lsma : AbstractBase
|
||||
if (bufferIndex >= period)
|
||||
bufferIndex = 0;
|
||||
|
||||
double m = (period * sum_xy - full_sum_x * sum_y) / full_denom;
|
||||
double b = (sum_y - m * full_sum_x) / period;
|
||||
output[i] = b - m * offset;
|
||||
double m = Math.FusedMultiplyAdd(period, sum_xy, -full_sum_x * sum_y) / full_denom;
|
||||
double b = Math.FusedMultiplyAdd(-m, full_sum_x, sum_y) / period;
|
||||
output[i] = Math.FusedMultiplyAdd(-m, offset, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user