Skip to content

Commit ee7f603

Browse files
committed
Prevent overflow in sliding average updates
1 parent abd8055 commit ee7f603

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

‎src/main/java/algorithms/sprint0/SlidingAverage.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static List<Double> movingAverage(int n, List<Integer> arr, int windowSize) {
2828
}
2929
result.add(sum / (double) windowSize);
3030
for (int i = windowSize; i < minSize; i++) {
31-
sum += arr.get(i) - arr.get(i - windowSize);
31+
sum += (long) arr.get(i) - arr.get(i - windowSize);
3232
result.add(sum / (double) windowSize);
3333
}
3434
return result;

‎src/test/java/algorithms/sprint0/SlidingAverageTest.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ void largeValuesDoNotOverflowTheWindowSum() {
4949
assertListDoubles(SlidingAverage.movingAverage(4, List.of(max, max, max, max), 2), max, max, max);
5050
}
5151

52+
@Test
53+
void extremeValuesDoNotOverflowTheRollingUpdate() {
54+
assertListDoubles(SlidingAverage.movingAverage(
55+
2, List.of(Integer.MIN_VALUE, Integer.MAX_VALUE), 1),
56+
Integer.MIN_VALUE, Integer.MAX_VALUE);
57+
}
58+
5259
private static void assertListDoubles(List<Double> actual, double... expected) {
5360
assertEquals(expected.length, actual.size(), "size");
5461
for (int i = 0; i < expected.length; i++) {

0 commit comments

Comments
 (0)