public class Random extends Object implements Serializable
2ã€ã®Randomã€ã³ã¹ã¿ã³ã¹ãåãã·ãŒãã§çæãããŠããå Žåãããããã«å¯ŸããŠåãã·ãŒã±ã³ã¹ã§ã¡ãœããåŒåºããè¡ããšãåãã·ãŒã±ã³ã¹ã§æ°å€ãçæããè¿ãããŸãã ãã®ç¹æ§ãä¿èšŒããããã«ãRandomã¯ã©ã¹ã«ã¯åºæã®ã¢ã«ãŽãªãºã ãæå®ãããŠããŸãã Javaã³ãŒãã®çµ¶å¯Ÿçãªç§»æ€æ§ã®ä¿æã®ããã«ãJavaã®å®è£
ã¯ããã«ç€ºãããŠããRandomã¯ã©ã¹ã®ã¢ã«ãŽãªãºã ããã¹ãŠäœ¿çšããå¿
èŠããããŸãã ãã ããRandomã¯ã©ã¹ã®ãµãã¯ã©ã¹ã¯ããã¹ãŠã®ã¡ãœããã®äžè¬èŠçŽã«æºæ ãããã®ã§ããã°ã»ãã®ã¢ã«ãŽãªãºã ã䜿çšã§ããŸãã
Randomã¯ã©ã¹ã«ãã£ãŠå®è£
ãããã¢ã«ãŽãªãºã ã§ã¯ãååŒåºãã§æ¬äŒŒä¹±æ°çã«çæãããæå€§32ããããæäŸã§ããprotectedãŠãŒãã£ãªãã£ã»ã¡ãœããã䜿çšãããŸãã
å€ãã®ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãMath.random()ã¡ãœããã䜿ãã»ããç°¡åã§ãã
java.util.Randomã®ã€ã³ã¹ã¿ã³ã¹ã¯ã¹ã¬ããã»ã»ãŒãã§ãã ãã ããè€æ°ã®ã¹ã¬ããã§åãjava.util.Randomã€ã³ã¹ã¿ã³ã¹ã䞊è¡ããŠäœ¿çšãããšãç«¶åãçºçããŠããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã ãã«ãã»ã¹ã¬ããèšèšã§ã¯ã代ããã«ThreadLocalRandomã䜿çšããããšãæ€èšããŠãã ããã
java.util.Randomã®ã€ã³ã¹ã¿ã³ã¹ã«ã¯å®å
šãªæå·åãæœãããŠããŸããã ã»ãã¥ãªãã£ä¿è·ãå¿
èŠãšããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã«å®å
šãªæå·åã®æœãããæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ãååŸããã«ã¯ã代ããã«SecureRandomã䜿çšããããšãæ€èšããŠãã ããã
| ã³ã³ã¹ãã©ã¯ã¿ | 説æ |
|---|---|
Random() |
æ°èŠä¹±æ°ãžã§ãã¬ãŒã¿ãäœæããŸãã
|
Random(long seed) |
åäžã®
longåã®ã·ãŒãã䜿ã£ãŠãæ°ããä¹±æ°ãžã§ãã¬ãŒã¿ãäœæããŸãã |
| 修食åãšå | ã¡ãœãã | 説æ |
|---|---|---|
DoubleStream |
doubles() |
0(å«ã)ãã1(å«ãŸãªã)ãŸã§ã®æ¬äŒŒä¹±æ°
doubleå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
DoubleStream |
doubles(double randomNumberOrigin, double randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
doubleå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
DoubleStream |
doubles(long streamSize) |
0(å«ã)ãã1(å«ãŸãªã)ãŸã§ã®æ¬äŒŒä¹±æ°
doubleå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
DoubleStream |
doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
doubleå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
IntStream |
ints() |
æ¬äŒŒä¹±æ°
intå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
IntStream |
ints(int randomNumberOrigin, int randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
intå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
IntStream |
ints(long streamSize) |
æ¬äŒŒä¹±æ°
intå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
IntStream |
ints(long streamSize, int randomNumberOrigin, int randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
intå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
LongStream |
longs() |
æ¬äŒŒä¹±æ°
longå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
LongStream |
longs(long streamSize) |
æ¬äŒŒä¹±æ°
longå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
LongStream |
longs(long randomNumberOrigin, long randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
longå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã |
LongStream |
longs(long streamSize, long randomNumberOrigin, long randomNumberBound) |
æå®ãããèµ·ç¹(å«ã)ãšå¢ç(å«ãŸãªã)ã«æºæ ããæ¬äŒŒä¹±æ°
longããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã |
protected int |
next(int bits) |
æ¬¡ã®æ¬äŒŒä¹±æ°ãçæããŸãã
|
boolean |
nextBoolean() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠãäžæ§ååžã®
booleanåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
void |
nextBytes(byte[] bytes) |
ã©ã³ãã ã»ãã€ããçæãããŠãŒã¶ãŒæå®ã®ãã€ãé
åã«é
眮ããŸãã
|
double |
nextDouble() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠã
0.0ãã1.0ã®ç¯å²ã§äžæ§ååžã®doubleåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
float |
nextFloat() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠã
0.0ãã1.0ã®ç¯å²ã§äžæ§ååžã®floatåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
double |
nextGaussian() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠãå¹³å
0.0ãæšæºåå·®1.0ã®ã¬ãŠã¹(ãæ£èŠã)ååžã®doubleåã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
int |
nextInt() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠãäžæ§ååžã®
intåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
int |
nextInt(int bound) |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠã0ããæå®ãããå€ã®ç¯å²(0ã¯å«ããããã®æå®ãããå€ã¯å«ãŸãªã)ã§äžæ§ååžã®
intåã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
long |
nextLong() |
ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒã±ã³ã¹ã䜿ã£ãŠãäžæ§ååžã®
longåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã |
void |
setSeed(long seed) |
åäžã®
longåã®ã·ãŒãã䜿ã£ãŠããã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒããèšå®ããŸãã |
public Random()
public Random(long seed)
longåã®ã·ãŒãã䜿ã£ãŠãæ°ããä¹±æ°ãžã§ãã¬ãŒã¿ãäœæããŸãã ã·ãŒãã¯ãæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ã®å
éšç¶æ
ã®åæå€ã§ãnext(int)ã¡ãœããã«ãã£ãŠä¿å®ãããŸãã
åŒã³åºãnew Random(seed)ã¯æ¬¡ãšç䟡ã§ãã
Random rnd = new Random();
rnd.setSeed(seed);seed - åæã·ãŒãsetSeed(long)public void setSeed(long seed)
longåã®ã·ãŒãã䜿ã£ãŠããã®ä¹±æ°ãžã§ãã¬ãŒã¿ã®ã·ãŒããèšå®ããŸãã setSeedã®äžè¬èŠçŽã§ã¯ãã·ãŒããšããŠåŒæ°seedã䜿ã£ãŠäœæãããã°ããã®ç¶æ
ãšåãã«ãªãããã«ããã®ä¹±æ°ãžã§ãã¬ãŒã¿ã»ãªããžã§ã¯ãã®ç¶æ
ã倿ŽããŸãã Randomã¯ã©ã¹ã«ããsetSeedã¡ãœããã®å®è£
ã§ã¯ãã·ãŒããæ¬¡ã®ããã«åå§çã«æŽæ°ããŸãã
(seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
ãŸããnextGaussian()ã«ãã£ãŠäœ¿çšãããhaveNextNextGaussianãã©ã°ãã¯ãªã¢ããŸãã
Randomã¯ã©ã¹ã«ããsetSeedã®å®è£
ã¯ãæå®ãããã·ãŒãã®48ãããã ãã䜿çšããŠããŸãã ãã ãäžè¬ã«ã¯ããªãŒããŒã©ã€ãããã¡ãœããã¯ãlongåŒæ°ã®64ããããã¹ãŠãã·ãŒãå€ãšããŠäœ¿çšã§ããŸãã
seed - åæã·ãŒãprotected int next(int bits)
nextã®äžè¬èŠçŽã§ã¯ãintåã®å€ãè¿ããåŒæ°bitsã1 - 32 (1ãš32ãå«ã)ã®ç¯å²ã®å Žåã¯ãæ»ãå€ã®å€ãã®äžäœãããã(ã»ãŒ)ç¬ç«ã«éžæããããããå€ã«ãªããããããã®å€ã¯(ã»ãŒ)åçã«0ãŸãã¯1ã«ãªããŸãã Randomã¯ã©ã¹ã«ããnextã¡ãœããã®å®è£
ã§ã¯ãã·ãŒãã
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
ã«åå§çã«æŽæ°ããæ¬¡ã®å€ãè¿ããŸãã
(int)(seed >>> (48 - bits)).
ããã¯ãD. H. Lehmerã«ãã£ãŠå®çŸ©ããããç·åœ¢ååæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ã§ãã KnuthèãThe Art of Computer Programming, Volume 3: Seminumerical Algorithmsãã®ã»ã¯ã·ã§ã³3.2.1ã bits - ã©ã³ãã ã»ãããpublic void nextBytes(byte[] bytes)
Randomã¯ã©ã¹ã«ããnextBytesã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public void nextBytes(byte[] bytes) {
for (int i = 0; i < bytes.length; )
for (int rnd = nextInt(), n = Math.min(bytes.length - i, 4);
n-- > 0; rnd >>= 8)
bytes[i++] = (byte)rnd;
}bytes - ä¹±æ°ãã€ããæ ŒçŽãããã€ãé
åNullPointerException - ãã€ãé
åãnullã§ããå Žåpublic int nextInt()
intåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã nextIntã®äžè¬èŠçŽã§ã¯ã1ã€ã®intåã®å€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã 232åã®ãã¹ãŠã®å¯èœãªintå€ã(ã»ãŒ)åçãªç¢ºçã§çæãããŸãã
Randomã¯ã©ã¹ã«ããnextIntã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public int nextInt() {
return next(32);
}intåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€public int nextInt(int bound)
intåã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã nextIntã®äžè¬èŠçŽã§ã¯ãæå®ãããç¯å²å
ã®1ã€ã®intåã®å€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã boundåã®ãã¹ãŠã®å¯èœãªintå€ã(ã»ãŒ)åçãªç¢ºçã§çæãããŸãã nextInt(int bound)ã¡ãœããã¯ãRandomã¯ã©ã¹ã«ãã£ãŠæ¬¡ã®ããã«å®è£
ãããŸãã
public int nextInt(int bound) {
if (bound <= 0)
throw new IllegalArgumentException("bound must be positive");
if ((bound & -bound) == bound) // i.e., bound is a power of 2
return (int)((bound * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % bound;
} while (bits - val + (bound-1) < 0);
return val;
}
äžèšã®èª¬æã§ãã»ãŒããšããèšèã䜿çšããŠããã®ã¯ãnextã¡ãœãããåã«ã»ãšãã©ç¡é¢ä¿ã«éžæããããããã®äžç«çãªãœãŒã¹ã ããã§ãã ã©ã³ãã ã«éžæããããããã®å®å
šãªãœãŒã¹ã§ãããšããã°ã瀺ãããã¢ã«ãŽãªãºã ã¯æå®ãããç¯å²ããå®å
šãªäžè²«æ§ã§intåã®å€ãéžæããããšã«ãªããŸãã
ãã®ã¢ã«ãŽãªãºã ã¯å€å°æ±ãã¥ããé¢ããããŸãã ãã®ã¢ã«ãŽãªãºã ã¯äžæ§ã§ãªãååžã«ãªãå€ãæçµ¶ããŸã(2^31ãnã§å²ããªãããšã«ãã)ã å€ãæçµ¶ããã確çã¯nã«ãã£ãŠç°ãªããŸãã ææªã®ã±ãŒã¹ã¯n=2^30+1ã§ããã®å Žåãæçµ¶ã®ç¢ºçã¯1/2ã«ãªããã«ãŒãã匷å¶çµäºãããŸã§ã®äºæ³ãããååŸ©åæ°ã¯2åã§ãã
ãã®ã¢ã«ãŽãªãºã ã¯ãnã2ã®çޝä¹ã§ããã±ãŒã¹ãç¹å¥ã«åŠçããŸãããã®ã¢ã«ãŽãªãºã ã¯ãåºã«ãªãæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ããé©åãªæ°ã®äžäœããããè¿ããŸãã ç¹å¥ãªåŠçããªãå Žåã¯ãé©åãªæ°ã®äžäœããããè¿ãããŸãã ãã®ã¯ã©ã¹ã§å®è£ ãããŠãããããªç·åœ¢ååæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ã¯ãäžäœãããã®å€ã®ã·ãŒã±ã³ã¹ã§åšæãçãããšãç¥ãããŠããŸãã ãã®ããããã®ç¹å¥ãªã±ãŒã¹ã§ã¯ãnã2ã®å°ããªçޝä¹ã§ããå Žåããã®ã¡ãœããã®é£ç¶ããåŒåºãã«ãã£ãŠè¿ãããå€ã®ã·ãŒã±ã³ã¹ã®é·ããå€§å¹ ã«é·ããªããŸãã
bound - äžé(å«ãŸãªã)ã æ£ã®å€ã§ãªããã°ãªããªã bound(å«ãŸãªã)ã®ç¯å²ã§äžæ§ååžã®ãintåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€IllegalArgumentException - boundãæ£ã§ãªãå Žåpublic long nextLong()
longåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã nextLongã®äžè¬èŠçŽã§ã¯ã1ã€ã®longåã®å€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã
Randomã¯ã©ã¹ã«ããnextLongã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public long nextLong() {
return ((long)next(32) << 32) + next(32);
}
Randomã¯ã©ã¹ã¯48ãããã®ã¿ãå«ãã·ãŒãã䜿çšããããããã®ã¢ã«ãŽãªãºã ã¯å¯èœãªãã¹ãŠã®longå€ã®äžéšããè¿ããŸãããlongåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€public boolean nextBoolean()
booleanåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã nextBooleanã®äžè¬èŠçŽã§ã¯ã1ã€ã®booleanåã®å€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã å€trueãšfalseã(ã»ãŒ)åçãªç¢ºçã§çæãããŸãã
Randomã¯ã©ã¹ã«ããnextBooleanã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public boolean nextBoolean() {
return next(1) != 0;
}booleanåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€public float nextFloat()
0.0ãã1.0ã®ç¯å²ã§äžæ§ååžã®floatåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã
nextFloatã®äžè¬èŠçŽã§ã¯ã0.0fãã1.0fã®ç¯å²(0.0fã¯å«ããã1.0fã¯å«ãŸãªã)ãã(ã»ãŒ)åçãªç¢ºçã§éžæããã1ã€ã®floatå€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã 圢åŒm x 2-24(mã¯224æªæºã®æ£ã®æŽæ°)ã®ã224åã®ãã¹ãŠã®å¯èœãªfloatå€ã(ã»ãŒ)åçãªç¢ºçã§çæãããŸãã
Randomã¯ã©ã¹ã«ããnextFloatã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public float nextFloat() {
return next(24) / ((float)(1 << 24));
}
äžèšã®èª¬æã§ãã»ãŒããšããèšèã䜿çšããŠããã®ã¯ãnextã¡ãœãããåã«ã»ãšãã©ç¡é¢ä¿ã«éžæããããããã®äžç«çãªãœãŒã¹ã ããã§ãã ã©ã³ãã ã«éžæããããããã®å®å
šãªãœãŒã¹ã§ãããšããã°ã瀺ãããã¢ã«ãŽãªãºã ã¯æå®ãããç¯å²ããå®å
šãªäžè²«æ§ã§floatåã®å€ãéžæããããšã«ãªããŸãã
[以åã®ããŒãžã§ã³ã®Javaã§ã¯ãçµæã¯æ¬¡ã®ããã«èª€ã£ãŠèšç®ãããŸããã
return next(30) / ((float)(1 << 30));
ããã§ãããçšåºŠçããæãããŸãããå®éã«ã¯ãæµ®åå°æ°ç¹æ°ã®äžžãã§ã®ãã€ã¢ã¹ã®ããã«å€å°ã®ã°ãã€ããçããã®ã§ãæå¹æ°åã®äžäœããããã1ããã0ã«ãªãããšãå€ããªããã¡ã§ããã]0.0ãã1.0ã®ç¯å²ã®äžæ§ååžã®floatåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€public double nextDouble()
0.0ãã1.0ã®ç¯å²ã§äžæ§ååžã®doubleåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã
nextDoubleã®äžè¬èŠçŽã§ã¯ã0.0dãã1.0dã®ç¯å²(0.0fã¯å«ããã1.0fã¯å«ãŸãªã)ãã(ã»ãŒ)åçãªç¢ºçã§éžæããã1ã€ã®doubleå€ãæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã
Randomã¯ã©ã¹ã«ããnextDoubleã¡ãœããã®å®è£
ã¯ã次ãšåçã§ãã
public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}
äžèšã®èª¬æã§ãã»ãŒããšããèšèã䜿çšããŠããã®ã¯ãç¬ç«ããŠéžæããããããã®ãœãŒã¹ãšããŠnextã¡ãœãããåãããªãã®ã¯ãè¿äŒŒçã«ã®ã¿æç«ããããã§ãã ã©ã³ãã ã«éžæããããããã®å®å
šãªãœãŒã¹ã§ãããšããã°ã瀺ãããã¢ã«ãŽãªãºã ã¯æå®ãããç¯å²ããå®å
šãªäžè²«æ§ã§doubleåã®å€ãéžæããããšã«ãªããŸãã
[以åã®ããŒãžã§ã³ã®Javaã§ã¯ãçµæã¯æ¬¡ã®ããã«èª€ã£ãŠèšç®ãããŸããã
return (((long)next(27) << 27) + next(27))
/ (double)(1L << 54);
ããã¯åçã®ããã«èŠããŸãã(è¯ãã¯ãªãã«ããŠã)ãå®éã«ã¯æµ®åå°æ°ç¹æ°ã®äžžãã§ã®ãã€ã¢ã¹ã®ããã«å€§ããªã°ãã€ããçããŠããŸãããæå¹æ°åã®äžäœãããã0ã«ãªã(1ã§ã¯ãªã)å¯èœæ§ã3åãããŸããã ãã®çšåºŠã®ã°ãã€ãã¯å®éã«ã¯åé¡ã«ãªããŸããããå®å
šæ§ãæ±ããŠä¿®æ£ã詊ã¿ãŠããŸãã] 0.0ãã1.0ã®ç¯å²ã®äžæ§ååžã®doubleåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€Math.random()public double nextGaussian()
0.0ãæšæºåå·®1.0ã®ã¬ãŠã¹(ãæ£èŠã)ååžã®doubleåã®æ¬äŒŒä¹±æ°å€ãè¿ããŸãã
nextGaussianã®äžè¬èŠçŽã§ã¯ãå¹³å0.0ãæšæºåå·®1.0ã®ã»ãŒéåžžã®æ£èŠååžããéžæããã1ã€ã®doubleå€ããæ¬äŒŒä¹±æ°ãšããŠçæãããŠè¿ãããŸãã
Randomã¯ã©ã¹ã«ããnextGaussianã¡ãœããã®å®è£
ã¯ã次ã®ã¹ã¬ããã»ã»ãŒããªããŒãžã§ã³ãšåçã§ãã
private double nextNextGaussian;
private boolean haveNextNextGaussian = false;
public double nextGaussian() {
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
s = v1 * v1 + v2 * v2;
} while (s >= 1 || s == 0);
double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
}
polar methodã䜿çšããŸã - ããã¯ãG. E. P. BoxãM. E. Mullerãããã³G. MarsagliaãDonald E. KnuthèãThe Art of Computer Programmingã第3å·»ãSeminumerical Algorithmsãã®ã»ã¯ã·ã§ã³3.4.1ã®Cãã¢ã«ãŽãªãºã Pã§èª¬æãããŠããŸãã StrictMath.logãšStrictMath.sqrtã®1åãã€ã®åŒã³åºãã ãã§2ã€ã®å¥ã
ã®å€ãçæããããšã«æ³šæããŠãã ããã 0.0ãæšæºåå·®1.0ã®ã¬ãŠã¹(ãæ£èŠã)ååžã®doubleåã®æ¬¡ã®æ¬äŒŒä¹±æ°å€public IntStream ints(long streamSize)
intå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextInt()åŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°intå€ãçæãããŸãã
streamSize - çæããå€ã®æ°intå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å Žåpublic IntStream ints()
intå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextInt()åŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°intå€ãçæãããŸãã
ints(Long.MAX_VALUE)ãšåçã§ããããã«å®è£
ãããŸããintå€ã®ã¹ããªãŒã public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
intå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°intå€ãçæãããŸãã
int nextInt(int origin, int bound) {
int n = bound - origin;
if (n > 0) {
return nextInt(n) + origin;
}
else { // range not representable as int
int r;
do {
r = nextInt();
} while (r < origin || r >= bound);
return r;
}
}streamSize - çæããå€ã®æ°randomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)intå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å ŽåããŸãã¯randomNumberOriginãrandomNumberBound以äžã®å Žåpublic IntStream ints(int randomNumberOrigin, int randomNumberBound)
intå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°intå€ãçæãããŸãã
int nextInt(int origin, int bound) {
int n = bound - origin;
if (n > 0) {
return nextInt(n) + origin;
}
else { // range not representable as int
int r;
do {
r = nextInt();
} while (r < origin || r >= bound);
return r;
}
}ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)ãšåçã§ããããã«å®è£
ãããŸããrandomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)intå€ã®ã¹ããªãŒã IllegalArgumentException - randomNumberOriginãrandomNumberBound以äžã®å Žåpublic LongStream longs(long streamSize)
longå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextLong()åŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°longå€ãçæãããŸãã
streamSize - çæããå€ã®æ°longå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å Žåpublic LongStream longs()
longå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextLong()åŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°longå€ãçæãããŸãã
longs(Long.MAX_VALUE)ãšåçã§ããããã«å®è£
ãããŸããlongå€ã®ã¹ããªãŒã public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
longããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°longå€ãçæãããŸãã
long nextLong(long origin, long bound) {
long r = nextLong();
long n = bound - origin, m = n - 1;
if ((n & m) == 0L) // power of two
r = (r & m) + origin;
else if (n > 0L) { // reject over-represented candidates
for (long u = r >>> 1; // ensure nonnegative
u + m - (r = u % n) < 0L; // rejection check
u = nextLong() >>> 1) // retry
;
r += origin;
}
else { // range not representable as long
while (r < origin || r >= bound)
r = nextLong();
}
return r;
}streamSize - çæããå€ã®æ°randomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)longå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å ŽåããŸãã¯randomNumberOriginãrandomNumberBound以äžã®å Žåpublic LongStream longs(long randomNumberOrigin, long randomNumberBound)
longå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°longå€ãçæãããŸãã
long nextLong(long origin, long bound) {
long r = nextLong();
long n = bound - origin, m = n - 1;
if ((n & m) == 0L) // power of two
r = (r & m) + origin;
else if (n > 0L) { // reject over-represented candidates
for (long u = r >>> 1; // ensure nonnegative
u + m - (r = u % n) < 0L; // rejection check
u = nextLong() >>> 1) // retry
;
r += origin;
}
else { // range not representable as long
while (r < origin || r >= bound)
r = nextLong();
}
return r;
}longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)ãšåçã§ããããã«å®è£
ãããŸããrandomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)longå€ã®ã¹ããªãŒã IllegalArgumentException - randomNumberOriginãrandomNumberBound以äžã®å Žåpublic DoubleStream doubles(long streamSize)
doubleå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextDouble()ã®åŒåºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°doubleå€ãçæãããŸãã
streamSize - çæããå€ã®æ°doubleå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å Žåpublic DoubleStream doubles()
doubleå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
ã¡ãœããnextDouble()ã®åŒåºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°doubleå€ãçæãããŸãã
doubles(Long.MAX_VALUE)ãšåçã§ããããã«å®è£
ãããŸããdoubleå€ã®ã¹ããªãŒã public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
doubleå€ããæå®ãããstreamSizeæ°ã ãçæããã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°doubleå€ãçæãããŸãã
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}streamSize - çæããå€ã®æ°randomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)doubleå€ã®ã¹ããªãŒã IllegalArgumentException - streamSizeã0æªæºã®å ŽåIllegalArgumentException - randomNumberOriginãrandomNumberBound以äžã®å Žåpublic DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
doubleå€ãå«ããäºå®äžç¡å¶éã®ã¹ããªãŒã ãè¿ããŸãã
èµ·ç¹ãšå¢çãæå®ããæ¬¡ã®ã¡ãœããåŒã³åºãã®çµæãšåæ§ã«ãæ¬äŒŒä¹±æ°doubleå€ãçæãããŸãã
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)ãšåçã§ããããã«å®è£
ãããŸããrandomNumberOrigin - åä¹±æ°å€ã®èµ·ç¹(å«ã)randomNumberBound - åä¹±æ°å€ã®å¢ç(å«ãŸãªã)doubleå€ã®ã¹ããªãŒã IllegalArgumentException - randomNumberOriginãrandomNumberBound以äžã®å Žå ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã