• Post Reply Bookmark Topic Watch Topic
  • New Topic

Looking for alternative method to replace math.random and random function in java  RSS feed

 
alex ja
Greenhorn
Posts: 16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Is there any method can use to random an integer from range -2 to 3.
I no want to use the Math.random and Random function in java.
 
Maneesh Godbole
Bartender
Posts: 11445
18
Android Eclipse IDE Google Web Toolkit Java Mac Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
alex ja wrote:
I no want to use the Math.random and Random function in java.

Why don't you want to use Random? Generating random numbers is not as simple as it might sound.
 
Stephan van Hulst
Saloon Keeper
Posts: 7974
143
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, there's quite some alternatives, but none as easy as just using Random. Is this an exercise?

You can reasonably simply implement a seeded random number generator using a xorshift algorithm, but you'd still need to generate a random seed, which is not easy.
 
Maneesh Godbole
Bartender
Posts: 11445
18
Android Eclipse IDE Google Web Toolkit Java Mac Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Isn't that how it's implemented already?
From java.util.Random

 
alex ja
Greenhorn
Posts: 16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I need to do this for my exercise. It required to implement own random method rather than using the built-in function in java ;D
 
alex ja
Greenhorn
Posts: 16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Stephan van Hulst wrote:Well, there's quite some alternatives, but none as easy as just using Random. Is this an exercise?

You can reasonably simply implement a seeded random number generator using a xorshift algorithm, but you'd still need to generate a random seed, which is not easy.



Is there possible to generate negative and positive number? Because i only able to generate positive number without negative if using seed...
 
Maneesh Godbole
Bartender
Posts: 11445
18
Android Eclipse IDE Google Web Toolkit Java Mac Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
alex ja wrote:
Is there possible to generate negative and positive number? Because i only able to generate positive number without negative if using seed...

Generate random number.
Generate random boolean
If boolean true, multiply number by -1
 
Stephan van Hulst
Saloon Keeper
Posts: 7974
143
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Maneesh, that's a Linear Congruential Generator. It doesn't use xorshift. Indeed, note the lack of exclusive-or.

Here's a cool article on xorshift+/xorshift* generators. Winston linked it here the other day: http://xorshift.di.unimi.it/

In short, it recommends xorshift1024*, xorshift128+ or SplitMix64, depending on the state space that you need. xorshift128+ is quite easy to implement in Java, as it only requires two long fields.
 
Piet Souris
Master Rancher
Posts: 2044
75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
given OP's opening sentence, I suspect that a simple
random.nextInt(2 * N) - N
would do.
 
Stephan van Hulst
Saloon Keeper
Posts: 7974
143
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
alex ja wrote:Is there possible to generate negative and positive number? Because i only able to generate positive number without negative if using seed...


PRNGs just generate random bits. How you interpret those bits is up to you. java.util.Random only uses 31 bits to generate an int, which is always non-negative. You can simply take more bits and widen the acceptable range.

To generate a 64 bit signed integer (a simple long), you can just update the seed, and return one of the two longs comprising it. To generate a signed int, simply cast one of the two longs that comprise the seed to int.
 
alex ja
Greenhorn
Posts: 16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Not really understand how to generate a positive and negative integer using seed, anyone willing to guide or explain further ? ;)
 
Stephan van Hulst
Saloon Keeper
Posts: 7974
143
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Show us what you have so far.
 
Campbell Ritchie
Marshal
Posts: 56536
172
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
People have already told you it is not a good idea to try to implement your own random procedure (it is not called a function). But you have to willy‑nilly. You must therefore find an algorithm and implement that. Have you searched for an algorithm? Did you know there is an algorithm in the Random class? You can use that. You have already been told that is an LCPNG and the documentation tells you where you can find more details.
Stephan has given you links to a different algorithm.
Have you looked at those two sources?

You can scale the number to be within the 6‑element range you mentioned earlier and subtract 2.
 
Tim Holloway
Saloon Keeper
Posts: 18792
74
Android Eclipse IDE Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
There are 3 things that "clever" people should never do. One is create their own encryption system, one is create their own security system, and the third is create their own random number generator. That's because all 3 of those things have subtleties that being a mere genius don't suffice for. To do them properly you need specific training and in the cases of self-invented encryption and random-number generation systems, a background in the mathematics.

Of the 3, the safest one to DIY is random number generators, since usually a random number generator that isn't truly random may skew results, but won't cause evil invaders to take over your system. The exception to that rule being the random number generator that drives the security system.

The seminal work on random number generators is Donald Knuth's Art of Computer Programming volume 3 - Seminumerical Algorithms. That's one of the best starting points. You get extra credit if you have a radioactive emitter/detector, though.
 
Winston Gutkowski
Bartender
Posts: 10575
66
Eclipse IDE Hibernate Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Tim Holloway wrote:There are 3 things that "clever" people should never do. One is create their own encryption system, one is create their own security system, and the third is create their own random number generator. That's because all 3 of those things have subtleties that being a mere genius don't suffice for.

Amen. Have a cow.

As an enthusiastic (but mediocre) bridge player, one of the things I DO know is that very few of the normal PRNGs we use will ever produce every hand that is possible (≈ 5.36 x 10²⁸ or 2⁹⁶ combinations), because their seeds are far too small and their cycles orders of magnitude too short.
Indeed, it'd be interesting to know if many of the gazillions of online poker and blackjack games out there can't be exploited because they use insufficient RNGs. Unlikely, but a punter can dream...

Winston
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!