Rostislav Krasny created MATH-1305:
--------------------------------------
Summary: Improve performance nextBytea() method of
BitsStreamGenerator and AbstractRandomGenerator
Key: MATH-1305
URL: https://issues.apache.org/jira/browse/MATH-1305
Project: Commons Math
Issue Type: Improvement
Affects Versions: 3.5, 4.0, 3.6
Reporter: Rostislav Krasny
I propose to use this code in BitsStreamGenerator
{code:java}
@Override
public void nextBytes(byte[] bytes) {
int index = 0;
// multiple 4 part of length, i.e length with two least
significant bits unset
int max = bytes.length & 0x7ffffffc;
// start filling the byte array with tetrads of bytes
while (index < max) {
int random = next(32);
bytes[index++] = (byte) random;
bytes[index++] = (byte) (random >>> 8);
bytes[index++] = (byte) (random >>> 16);
bytes[index++] = (byte) (random >>> 24);
}
// fill the reminded bytes
if (index < bytes.length) {
int random = next(32);
while (true) {
bytes[index++] = (byte) random;
if (index < bytes.length) {
random >>>= 8;
} else {
break;
}
}
}
}
{code}
I also propose to use the same code but with nextInt() calls instead of
next(32) in the AbstractRandomGenerator. This implementation improves
performance and fixes inconsistency bugs in those two classes discussed in the
MATH-1300. It is also quite simple and well commented.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)