Тема: Замена Rnd
Показать сообщение отдельно
Старый 12.10.2005, 09:33   #1
alcosholik
 
Сообщений: n/a
Смущение

Originally posted by Diplomat+Oct 11 2005, 06:17 PM--><div class='quotetop'>ЦИТАТА(Diplomat @ Oct 11 2005, 06:17 PM)</div><div class='quotemain'>Забавная задачка:
Используя генератор Rnd, написать ф-ю, которая возвращала бы значения 1, 2 или 3 с равной вероятностью.[/b]


Originally posted by SubZer0@Oct 11 2005, 09:54 PM
Dim Value(4)
For q=0 To 10000
X=aRnd(1,4)
Value(X)=Value(X)+1
Next
For q=0 To 4
Print q+" возвращалось приблизительно в "+ Value(q)/100+"% случаев..."
Next
WaitKey()
End


function arnd%(b%,e%)

b1%=-b%*10
e1%=e%*20

repeat

r%=rnd(b1%,e1%)

until r%>=b% and r%<=e%

if r>e then r=r-e

return r%
end function
результат - супер! скорость работы - подбирается коэффициентами умножения... тут типа движок* <Скорость> -----0----- <Ровнее график> чемто надо жертвовать..
<!--QuoteBegin-PAX
@Oct 11 2005, 10:04 PM
А вот что я придумал :

Dim Value(4)
For q=0 To 1000000
X=arnd(1,4)
Value(X)=Value(X)+1
Next
For q=0 To 4
Print q+" возвращалось приблизительно в "+ Value(q)/100+"% случаев..."
Next
WaitKey()
End


Function arnd%(b%,e%)
If Rand(0,1) Then
Return Rnd(b%,e%/2)
Else
Return Rnd(e%/2+1,e%)
EndIf
End Function
На большом количестве испытаний показывает почти одинаковые результаты
[/quote]
 
Ответить с цитированием