Revision 52802
Added by Claudio Atzori over 5 years ago
modules/dnet-mapreduce-jobs/branches/beta/src/test/java/eu/dnetlib/data/mapreduce/AlgorithmsTest.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.data.mapreduce; |
2 | 2 |
|
3 |
import java.math.BigDecimal; |
|
4 |
|
|
3 | 5 |
import org.apache.commons.math.util.MathUtils; |
4 | 6 |
import org.junit.Test; |
5 | 7 |
|
... | ... | |
13 | 15 |
final double th = 0.98; |
14 | 16 |
final double lb = th - 0.01; |
15 | 17 |
|
16 |
System.out.println(MathUtils.round(Algorithms.scale(0.98, lb, 1, 0, 1), 2)); |
|
18 |
final double scaled = Algorithms.scale(0.9976, lb, 1, 0, 1); |
|
19 |
System.out.println(MathUtils.round(scaled, 2, BigDecimal.ROUND_HALF_DOWN)); |
|
17 | 20 |
} |
18 | 21 |
|
19 | 22 |
} |
modules/dnet-mapreduce-jobs/branches/beta/src/main/java/eu/dnetlib/data/mapreduce/Algorithms.java | ||
---|---|---|
11 | 11 |
|
12 | 12 |
public static double LIMIT_MIN = 0; |
13 | 13 |
|
14 |
/** |
|
15 |
|
|
16 |
Source: https://stackoverflow.com/questions/5294955/how-to-scale-down-a-range-of-numbers-with-a-known-min-and-max-value |
|
17 |
|
|
18 |
f(min) = a |
|
19 |
f(max) = b |
|
20 |
|
|
21 |
f(x) = x - min ===> f(min) = min - min = 0 |
|
22 |
|
|
23 |
|
|
24 |
x - min max - min |
|
25 |
f(x) = --------- ===> f(min) = 0; f(max) = --------- = 1 |
|
26 |
max - min max - min |
|
27 |
|
|
28 |
|
|
29 |
(b-a)(x - min) |
|
30 |
f(x) = -------------- + a |
|
31 |
max - min |
|
32 |
*/ |
|
14 | 33 |
public static double scale(final double valueIn, final double baseMin, final double baseMax, final double limitMin, final double limitMax) { |
15 | 34 |
return ((limitMax - limitMin) * (valueIn - baseMin) / (baseMax - baseMin)) + limitMin; |
16 | 35 |
} |
Also available in: Unified diff
javadoc and test