HP Forums

Full Version: (12C) Random Number (No Seed Needed)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
This Random Number Generator program used Pi and e^x to generate number between zero and one that no starting seed is necessary.
This sample Random Generator program generate 6 digits integers.

Code:

RCL 0
355
ENTER
113
/
+
e^x
FRAC
STO 0
EEX
6
x
INTG

Example: R/S --> 676,246 R/S --> 505,826 R/S --> 375,537

Above result will be difference than this example.

Here is the Random Generator portion between 0 to 1 with automatic random generator loop.

Code:

RCL 0
355
ENTER
113
/
+
e^x
FRAC
STO 0
PSE
GTO 01

Randomness loop result.

Gamo





Gamo
You can save a few bytes of code and generate numbers from 1 to 999999 (instead of 999998).

The result of FRAC is necessarily going to be less than one, so multiply it by "1E6" instead of 999999 before taking the integer part.

Either that or do what most PRNGs do on calculators and just return the fractional part.
Thank You grsbanks

Very good idea by using the EEX
Would like to get the range between
100,000 to 999,999

Gamo
Instead of "1 EEX 6 x", use "9 EEX 5 x EEX 5 +"
(12-31-2017 08:13 AM)Gamo Wrote: [ -> ]This Random Number Generator program used Pi and e^x to generate number between zero and one that no starting seed is necessary.

I assume you want to say that it also works for seeds ≤ 0.
Replace ex with x² and you got one of the classic PRNGs for programmable calculators.

(12-31-2017 08:13 AM)Gamo Wrote: [ -> ]This sample Random Generator program generate 6 digits integers.

It generates integers between 0 and 999998.

(12-31-2017 08:13 AM)Gamo Wrote: [ -> ]Here is the Random Generator portion between 0 to 1 with automatic random generator loop.
...
This can test to see the Randomness result.

?!? – how do you test the statistical properties this way?

(12-31-2017 09:07 AM)Gamo Wrote: [ -> ]Very good idea by using the EEX
Would like to get the range between
100,000 to 999,999

If you got a random number r between 0 and 0,9999... you can easily transform it into a random integer between a and b (inclusive) by calculating int((b–a+1)*r) + a. So if you want an interval from 100000 to 999999 the transformation is int(900000*r)+100000, as grsbanks already noted.

Dieter
Reference URL's