ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

¦Û¤v¼g ¦Û¤vªº¤è¦¡²£¥Í¶Ã¼Æ

¦^´_ 8# sjgau
¦Û¤v¼g¯uªº¥i¥Hµo²{«Ü¦h°ÝÃD¡A¾Ç¨ì«Ü¦h¡A
§Æ±æ¯à©ß¿j¤Þ¥É¡A§Ú¬O±Ä¥ÎMicrosoft Visual Basic ªº¨º²Õ°Ñ¼Æ¡A¥é³yrnd¨ç¼Æ¤@¼Ë¶Ç¦^single¡C
  1. Function myRnd(Optional Number) As Single
  2.   Dim tmp As Double
  3.   'LCG Algorithm¡G
  4.   '  X(n+1) = (a * X(n) + c) mod m
  5.   Const a As Long = 1140671485
  6.   Const c As Long = 12820163
  7.   Const m As Long = 16777216  '2^24
  8.   Const x0 As Long = 1     '®Ú¾Ú§A¨Ï¥Î­þ²Õ°Ñ¼Æ¡Ax0¦³®É¦³»Ý­n²Å¦Xªº±ø¥ó¡C
  9.   
  10.   Static seed As Variant
  11.   '§Q¥ÎIsEmpty§PÂ_¡A¨Óªì©l¤Æ¤@ staticÅܼƬ°«D¹s­È¡C
  12.   If IsEmpty(seed) Then seed = x0
  13.   
  14.   '§Q¥ÎIsMissing§PÂ_ optional °Ñ¼Æ¬O§_¶Ç¤J¡A­Y¨ç¼Æ¦³¶Ç¤J°Ñ¼Æ®É¡A³]¬°ºØ¤l¡C
  15.   If Not IsMissing(Number) Then seed = Number
  16.    
  17.   'myRnd = (a * seed + c) Mod m
  18.   '(a * seed + c)¹L¤j®É¡Amod ·|µo¥Í·¸¦ì¡A¥u¯à¥Î¨ä¥L¤èªk¨D¡C
  19.   
  20.   tmp = a * seed + c  'double
  21.   seed = tmp - m * Fix(tmp / m)   '§Y­pºâ (a * seed + c) Mod m¡A¦¹¬°²£¥Íªº¶Ã¼Æ­È¡A¨Ã³]¬°¤U¦¸ºØ¤l
  22.   myRnd = seed / m  '¨Ï¶Ç¦^¶Ã¼Æ­È¤¶©ó0¨ì1¤§¶¡
  23. End Function
½Æ»s¥N½X

TOP

¥»©«³Ì«á¥Ñ stillfish00 ©ó 2013-11-1 08:20 ½s¿è

¦^´_ 13# stillfish00
¹ê´ú«á¤´¤£º¡·N¡A©I¥sm¦¸«á¡A¤£·|¦^¨ì²Ä¤@²Õ²£¥ÍªºÀH¾÷¼Æ¡A
¥D¦]¬O tmp = a * seed + c §Y«K¬O double ¼Æ¤´¦s¦³ºë½T«×»~®t...   

LongLong¤S¥u¦³¦b64¦ì¤¸¥­¥x¤W¥i¥H¨Ï¥Î

TOP

¦^´_ 15# c_c_lai
¨ä¹ê§Úªº·N«ä¬O³o¼Ë¡G
  1. Sub EX()
  2.   Dim a As Single, b As Single
  3.   Dim i
  4.   
  5.   a = Rnd
  6.   For i = 2 To 16777216
  7.     Rnd
  8.   Next
  9.   b = Rnd
  10.   Debug.Print a, b
  11.   
  12.   a = myRnd
  13.   For i = 2 To 16777216
  14.     myRnd
  15.   Next
  16.   b = myRnd
  17.   Debug.Print a, b
  18.   
  19. End Sub
½Æ»s¥N½X
¹³rnd¤@¼Ë¡A³om¦¸¨úªº¶Ã¼Æ³£·|¤£¤@¼Ë¡A
¦ýrnd¨ú§¹m¦¸«á¡A¦A¨ú¤U¤@¦¸®É¡A·|¦^¨ì²Ä¤@¦¸¨úªº­È¡A¦A¤@¦¸´`Àô¡C
´N¹³LCG¸Ì­±´£¨ìªº¥Í©R¶g´Á

TOP

¦^´_  stillfish00
¹ê´ú«á¤´¤£º¡·N¡A©I¥sm¦¸«á¡A¤£·|¦^¨ì²Ä¤@²Õ²£¥ÍªºÀH¾÷¼Æ¡A
¥D¦]¬O tmp = a * seed +c  ...
stillfish00 µoªí©ó 2013-11-1 08:16


«á¨Ó§ï¬° tmp = (a mod m) *( seed mod m) + c §Y¥i¡A
²£¥Í¤§¼Ò¼Æ¤£ÅÜ¡A¤S¦]m = 2^24®É¡A tmp¬°¤p©ó2^49¤§¾ã¼Æ¡A
double¤§ºë½T«×¥i§¹¾ãªí¥Ü¡A¤£·|¦³»~®t¡C
#16 ´ú¸Õ¤]¥i¥¿±`´`Àô¡C

TOP

        ÀR«ä¦Û¦b : ¤â¤ß¦V¤U¬O§U¤H¡A¤â¤ß¦V¤W¬O¨D¤H¡F§U¤H§Ö¼Ö¡A¨D¤Hµh­W¡C
ªð¦^¦Cªí ¤W¤@¥DÃD