比率の積算値(比率と任意の値を積算して四捨五入)が0になるかどうかの境界値、、、
小数点6桁の場合は、以下のとおりである。
| 比率 | 比率 × value |
| 0.000001 | 1以上、500000未満は、結果=0 、500000以上⇒ 結果>=1 |
| 0.000002 | 1以上、250000未満は、結果=0 、250000以上⇒ 結果>=1 |
| 0.000003 | 1以上、166667未満は、結果=0 、166667以上⇒ 結果>=1 |
| 0.000004 | 1以上、125000未満は、結果=0 、125000以上⇒ 結果>=1 |
| 0.000005 | 1以上、100000未満は、結果=0 、100000以上⇒ 結果>=1 |
| 0.000006 | 1以上、 83333未満は、結果=0 、 83333以上⇒ 結果>=1 |
| 0.000007 | 1以上、 71429未満は、結果=0 、 71429以上⇒ 結果>=1 |
| 0.000008 | 1以上、 62600未満は、結果=0 、 62600以上⇒ 結果>=1 |
この境界値を求めるのに頭の中だけで計算できるのは、せいぜい 0.000005 ぐらいまでだろう。
任意に、0.003017 の境界値を求める。
Java の BigDecimal で以下のように計算すれば良い。
int n = BigDecimal.ONE.divide(BigDecimal.valueOf(2)) .divide(new BigDecimal("0.003017"), 0, RoundingMode.UP) .intValue();
結果は、
166
0.000001~0.000020 のそれぞれの境界値を並べた List は、以下のように求める。
List<Integer> list = IntStream.rangeClosed(1, 20).boxed() .map(e->BigDecimal.valueOf(e).divide(BigDecimal.valueOf(1000000)).setScale(6)) .map(e->BigDecimal.ONE.divide(BigDecimal.valueOf(2)).divide(e, 0, RoundingMode.UP).intValue()) .collect(Collectors.toList());
List は、
[500000, 250000, 166667, 125000, 100000, 83334, 71429, 62500, 55556, 50000, 45455, 41667, 38462, 35715, 33334, 31250, 29412, 27778, 26316, 25000]