commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luc Maisonobe (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (MATH-1305) Improve performance of nextBytes() method of BitsStreamGenerator and AbstractRandomGenerator
Date Fri, 01 Jan 2016 11:30:39 GMT

     [ https://issues.apache.org/jira/browse/MATH-1305?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Luc Maisonobe updated MATH-1305:
--------------------------------
    Fix Version/s: 3.6

> 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
>             Fix For: 3.6
>
>
> 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)

Mime
View raw message