[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [jira] [Updated] (MATH-1307) Create a base class for all RNGs
From:       "Otmar Ertl (JIRA)" <jira () apache ! org>
Date:       2015-12-30 17:09:49
Message-ID: JIRA.12924367.1451151259000.29518.1451495389609 () Atlassian ! JIRA
[Download RAW message or body]


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

Otmar Ertl updated MATH-1307:
-----------------------------
    Attachment: BaseRandomGeneratorFloatGenerationPerformanceTest.java

I have played around with the generation of floats and doubles from ints. On my \
environment I made the interesting observation that following code which avoids the \
floating point multiplication {code}
public double nextDouble2() {
    final long high = ((long) (nextInt() >>> 6)) << 26;
    final int low  = nextInt() >>> 6;
    return Double.longBitsToDouble(0x3ff0000000000000L | high | low) - 1.;
}
{code}
is about 20% faster than
{code}
public double nextDouble() {
    final long high = ((long) (nextInt() >>> 6)) << 26;
    final int low  = nextInt() >>> 6;
    return (high | low) * 0x1.0p-52d;
}
{code}
Please see [^BaseRandomGeneratorFloatGenerationPerformanceTest.java] for which I got \
following output: {code}
nextDouble2: Time = 24.267s, Sum = 4.757900840407535E9
nextFloat: Time = 24.304s, Sum = 1.6777216E7
nextDouble: Time = 29.654s, Sum = 4.757900840407535E9
nextFloat2: Time = 24.276s, Sum = 1.6777216E7
{code}

> Create a base class for all RNGs
> --------------------------------
> 
> Key: MATH-1307
> URL: https://issues.apache.org/jira/browse/MATH-1307
> Project: Commons Math
> Issue Type: Improvement
> Reporter: Gilles
> Assignee: Gilles
> Priority: Minor
> Labels: api, inheritance
> Fix For: 4.0
> 
> Attachments: BaseRandomGenerator.java, \
> BaseRandomGeneratorFloatGenerationPerformanceTest.java 
> 
> I proposed to create a base class which the existing abstract classes \
> {{AbstractRandomGenerator}} and {{BitsStreamGenerator}} will extend. This would \
> allow to define {{nextBytes(byte[])}} at the base class level. The code for that \
> method is almost identical in the two hierarchies: they only differ in a call to \
> either {{nextInt()}} or {{next(32)}} respectively; the latter is however the same \
> as the former, in disguise, and is not subject to change given the type of return \
> value. As a corollary, the new base class can be the unique place where to add \
>                 utilities such as the one proposed in MATH-1306.
> *Update:* {{AbstractRandomGenerator}} and {{BitsStreamGenerator}} are both \
> obsoleted by the class proposed in this report.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic