PDA

View Full Version : سوال: مولد اعداد تصادفی با دوره تناوب بالا و کارایی خوب



DotNet_King
شنبه 29 تیر 1387, 13:05 عصر
با سلام و خسته نباشید
من برای پروژه درسی ام به یه مولد اعداد تصادفی با دوره تناوب بالا و کارایی خوب نیاز دارم که دقت بالایی داشته باشه و خروجی اش هم به صورت اعداد اعشاری کمتر از یک و دوبل باشه

این تابع مولدی که تو خود دات نت هست کاراییش به چه صورته؟

اگه کسی از دوستان سورس خوبی برای اینچنین تابعی داره لطف کنه و اینجا بذاره.

من با این سورس تو فرترن خیلی خوب نتیجه گرفتم ولی تو وی بی دات نت هر کار می کنم جواب نمی ده . جالبه که این کد رو تبدیل کردم ولی دات نت خیلی بد عمل میکنه؟ اشکال چیه؟



FUNCTION RAN(SEED)
DOUBLE PRECISION SEED,A,B,DMOD
A=SEED*7.**5
B=2.**31-1.
SEED=DMOD(A,B)
RAN=1./2.**31*SEED
RETURN
END

DarkSoroush
شنبه 29 تیر 1387, 19:41 عصر
تابعی در vb هست به نام rnd که همین کاری که میخوای رو انجام میده. البته من فکر کنم برای اینکه کاری کرد که اعداد تکراری زیاد ساخته نشه بشه با ذخیره اعداد قبلی برنامه رو مجبور کرد که اعداد تکراری برای مدتی تولید نکنه!! در غیر اینصورت زیاد نمیشه دوره تناوب رو طولانی کرد. من خودم شخصا این کد رو خیلی استفاده میکنم. تقریبا" دارای دوره تناوب مطلوبی هم هست. میتونی با کمی تغییر کاری کنی که مقداری زیر 1 بهت بده:


Private Function GenerateRNumber(ByVal min As Integer, ByVal max As Integer) As Integer
Dim randomBytes() As Byte = New Byte(3) {}
Dim rng As Security.Cryptography.RNGCryptoServiceProvider = New Security.Cryptography.RNGCryptoServiceProvider()
rng.GetBytes(randomBytes)
Dim seed As Integer = ((randomBytes(0) And &H7F) << 24) Or (randomBytes(1) << 16) Or (randomBytes(2) << 8) Or (randomBytes(3))
Dim random As Random = New Random(seed)
Return random.Next(min, max + 1)
End Function

شاید به دردتون بخوره.