Visit our Sponsor   Visit our Sponsor
delphi3000.com - the free delphi knowledge platform
delphi3000.com - the free delphi knowledge platform
496 Users Online NOW
Have a look at your member-status

connecting people's knowledge


  - Recent ArticlesRSS feed for Recent Articles on delphi3000.com
  - List of All Articles
  - Top Viewed Articles
  - Articles (+Attachem.)
  - Articles Of Interest
  - Categories
  - Top Uploader
  - Search
  - Index

  - My Home
  - Submit an Article
  - My Articles
  - My Personal Data
  - My Bookmarks
  - Activities
  - Login/Logout

  - Sign Up
  - Why Sign Up
  - Newsletter

  - Press
  - Advertise

  - Contact
  - Feedback





Community
Borland
ClubeDelphi
Dr. Bob
UK-BUG
Delphi Meetings
Planeta Delphi







Startblatt.de






Share this article with friendsShare this article with friends
Rate this articleRate this article - to keep the quality of delphi3000.com !
Comment this article or read through previous comments (2)


Randomizing with the linear congruencemethodFormat this article printer-friendly!Bookmark function is only available for registered users!
Product:
Delphi all versions
Category:
Scientific
Skill Level:
Scoring:
Last Update:
11/02/2002
Search Keys:
delphi delphi3000 article borland vcl code-snippet randomize linear congruencemethod uniformly-randomized-numbers
Times Scored:
3
Visits:
2948
Uploader: DenShade Hyp
Company:
Reference: N/A
 
Question/Problem/Abstract:
The standard randomize function does not return a set of uniformly randomized numbers.How can i truly randomize values?
Answer:



In order to produce uniformly randomized numbers it is suggested that you
use this method rather than using the standard implemented random function.

For scientifical purposes this class is more optimal than the standard functions

unit realRandomunit;

interface
uses windows;

type
realRandom = class
private
  lastResult : integer;

public
   constructor create;
   function    NextInteger : integer;
end;

const
Amplitude = 48271; //these values have been assigned by professionals
Modulo    = 2147483647;
Q         = Modulo div Amplitude;
R         = Modulo mod Amplitude;
implementation

constructor realRandom.create;
var
seed : _SYSTEMTIME;
begin
getSystemTime( seed );//use this for seed
lastResult := seed.wMilliseconds;
end;

function    realRandom.NextInteger : integer;
begin
result := Amplitude * (lastResult mod Q) - R * (lastResult div Q);
if result < 0 then inc(result,Modulo);
lastResult := result;
end;

end.





Please rate this article!
Skill level:
BeginnerExpert

Useful:
No!Very!

Overall rating:
PoorExcellent



Comments to this article
Write a new comment
Inc() function in NextInteger method
    George Merriman (Nov 7 2002 9:07PM)

What is the meanng of this expression in the NextInteger method?

  'if result < 0 then inc(result,Modulo);'

Is this a typo?

Thanks,

George

Respond

RE: Inc() function in NextInteger method
George Merriman (Nov 7 2002 9:12PM)

Sorry, I didn't realize there was a version of Inc() that took two arguments. Never mind.

George
Respond














 
Sign up to consume product discounts for Bronze memberships !

read more


  Visit our Sponsor

 

  Community Ad of
L. Rosenstein
 
   














 







     
  Copyright © 2000 - 2007 delphi3000.com - All rights reserved. Terms of use. || Privacy
delphi3000.com is a service by bluestep.com IT-Services GmbH (Vienna)