akaGM
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: real*8 function randomrange(lr, ur) ! [lowlimit .. uplimit] use ifport implicit none real*8 lr, ur, r real*8 MIN_REAL_VALUE_/2.0e-07/ r = Random(0) if (r < MIN_REAL_VALUE_) then randomrange = lr else randomrange = lr + (ur - lr) * r endif end function randomrange ! main use ifport implicit none integer*4 i, iseed real*8 r, lr, ur real*8 MIN_REAL_VALUE_/2.0e-07/ real*8 randomrange external randomrange call SEED(100) lr = 1.d0 ur = 5.d0 i = 1 r = 0.d0 do while (.true.) r = randomrange(lr, ur) write(*,*) r if (r > (ur - MIN_REAL_VALUE_)) then write(*,*) r, ' upper limit at iteration #', i exit endif if (r < (lr + MIN_REAL_VALUE_)) then write(*,*) r, ' lower limit at iteration #', i exit endif i = i + 1 enddo write(*,*) write(*,*) r, ' at iteration #', i write(*,*) 'Done!' read(*,*) end | в общем пока ничего лучше не придумал, просьба покритиковать... ----- господи, что за фигня, критика отменяется :) надоело: randomrange = lr + (ur - lr) * Random(0) всё... НАГ-овская функа работает не лучше Код: real*8 function randomrange(lolimit, uplimit) ! [lolimit .. uplimit] use ifport implicit none real*8 lolimit, uplimit real*8 r r = Random(0) randomrange = MIN(MAX(lolimit*(1.d0-r)+uplimit*r,lolimit),uplimit) end function randomrange |
| Всего записей: 25203 | Зарегистр. 06-12-2002 | Отправлено: 08:27 27-01-2012 | Исправлено: akaGM, 08:58 27-01-2012 |
|