[ https://issues.apache.org/jira/browse/MATH-1305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15066290#comment-15066290 ]
Rostislav Krasny commented on MATH-1305: ---------------------------------------- I did it similar to how it is done in MersenneTwister. Take a look at its next(int) method. Same bit shifting is used in other BitsStreamGenerator descendants. For example in Well512a. I don't think it could be confusing. Vice versa, using ">>" instead of ">>>" after calling the next(int) method may create questions why it is done differently. > Improve performance of nextBytes() 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: 4.0, 3.5, 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 remains 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)