diff --git a/src/main/java/gr/james/sampling/LiLSampling.java b/src/main/java/gr/james/sampling/LiLSampling.java index 8ba5ca2..96762d2 100644 --- a/src/main/java/gr/james/sampling/LiLSampling.java +++ b/src/main/java/gr/james/sampling/LiLSampling.java @@ -51,7 +51,8 @@ public static RandomSamplingCollector collector(int sampleSize, Random ra @Override void init(int sampleSize, Random random) { - W = Math.exp(Math.log(RandomSamplingUtils.randomExclusive(random)) / sampleSize); + // W = Math.exp(Math.log(RandomSamplingUtils.randomExclusive(random)) / sampleSize); + W = Math.pow(RandomSamplingUtils.randomExclusive(random), 1.0 / sampleSize); } @Override @@ -63,7 +64,8 @@ long skipLength(long streamSize, int sampleSize, Random random) { if (skip == Long.MIN_VALUE) { // Sometimes when W is very small, 1 - W = 1 and Math.log(1) = +0 instead of -0 skip = Long.MAX_VALUE; // This results in negative infinity skip } - W = W * Math.exp(Math.log(random2) / sampleSize); + // W = W * Math.exp(Math.log(random2) / sampleSize); + W = W * Math.pow(random2, 1.0 / sampleSize); return skip; } } diff --git a/src/test/java/gr/james/sampling/RandomSamplingTest.java b/src/test/java/gr/james/sampling/RandomSamplingTest.java index 0305c1d..a1971dc 100644 --- a/src/test/java/gr/james/sampling/RandomSamplingTest.java +++ b/src/test/java/gr/james/sampling/RandomSamplingTest.java @@ -42,7 +42,7 @@ public static Collection>> implementations() { @Test public void correctness() { final int[] streamSizes = {1, 20, 100}; - final int[] repsSizes = {1000000, 1000000, 1000000}; + final int[] repsSizes = {1000000, 1000000, 2000000}; Assert.assertEquals(streamSizes.length, repsSizes.length); diff --git a/src/test/java/gr/james/sampling/WeightedRandomSamplingTest.java b/src/test/java/gr/james/sampling/WeightedRandomSamplingTest.java index f1d41fa..febb076 100644 --- a/src/test/java/gr/james/sampling/WeightedRandomSamplingTest.java +++ b/src/test/java/gr/james/sampling/WeightedRandomSamplingTest.java @@ -39,7 +39,7 @@ public static Collection>> implementati @Test public void correctness() { final int[] streamSizes = {1, 20, 100}; - final int[] repsSizes = {1000000, 1000000, 1000000}; + final int[] repsSizes = {1000000, 1000000, 2000000}; Assert.assertEquals(streamSizes.length, repsSizes.length);