senangnya ada member be excel yg sprti pak hilman ini :)

ikut menambahkan yg saya tahu,
sekuensial random biasanya digunakan dalam ilmu statistik, non sekuensial lebih 
banyak digunakan pada software game

(cmiiw)

Dan Algoritma (formula) yang digunakan dalam fungsi RND:

=======================================
Microsoft Visual Basic uses the linear-congruential method for pseudo-random 
number generation in the RND function. The following pseudo code documents the 
algorithm used:

x1 = ( x0 * a + c ) MOD (2^24)
                                

x1 = new value
x0 = previous value (an initial value of 327680 is used by Visual Basic)
a = 1140671485
c = 12820163
=======================================

bahan bacaan:

INFO: How Visual Basic Generates Pseudo-Random Numbers for the RND Function
http://support.microsoft.com/kb/231847

RND and RANDOMIZE Alternatives for Generating Random Numbers
http://support.microsoft.com/kb/28150/EN-US

Pseudorandom number generator
http://en.wikipedia.org/wiki/Pseudorandom_number_generator

Linear congruential generator
http://en.wikipedia.org/wiki/Linear_congruential_generator


>semoga bermanfaat


--- In [email protected], "STDEV(i)" <setiyowati.devi@...> wrote:
>
> Asik nih,  kita ketambahan members yg suka sebar2 pengalaman & berbagi
> pengetahuan seperti ini...
> 
> Terma kasih mas Hilman, atas info di balik info soal acak-mengacak.
> Ini tentu saja menambah wawasan kami members milis [belajar-excel].
> 
> Tidak banyak orang yg memperhatikan detil acakan seperti itu kecuali orang
> yg
> pernah ketemu atau terlibat langsung (aplikasi yg dibuatnya memerlukan data
> yg diacak-acak secara 'bagus'
> 
> Beberapa waktu yang lalu siti juga dengar ada yang bilang (entah siapa dan
> kapan)
> bahwa untk membuat "acakan yg agak lebih acak" kita disarankan mmberikan
> statement
> 
> Randomize
> 
> Katanya, dengan adanya statement ini, VBA akan memberi BENIH BARU untuk
> proses
> pengacakan berikutnya; mungkin prinsipnya sama atau mirip-mirip dengan
> 
> If Rnd = 0.705547511577606 Then Call AcakFungsiRndUtkPertamakali
> Mungkin lho ya... (cmiiw..)
> Siapa tahu hal ini akan dibahas mas Hilman di tulisan berikutnya...,
> 
> Terima kasih &
> wassalam
> -siti-
> 
> 
> http://groups.yahoo.com/group/XL-mania/files/Lessons/macro%20-%20random.zip
> http://groups.yahoo.com/group/XL-mania/files/Lessons/function%20-%20random_with_normal_distribution.zip
> http://tech.groups.yahoo.com/group/XL-mania/message/17930
> http://tech.groups.yahoo.com/group/XL-mania/message/17907
> 
> 
> 
> 
> 
> 2011/4/10 Hilman <hilman_email@...>
> 
> >
> >   Tau ngga,…?? Kalau Random Number yg dihasilkan dari fungsi Rnd pada VBA,
> > menghasilkan pola yang sama.
> >   atau dengan kata lain, hasil dari proses pengacakan nya sudah dapat di
> > prediksi….
> >
> >   Pada saat workbook "Random Patern.xls" ini baru dibuka, perhatikan cell
> > A1. Nilainya adalah "Acak ke 0"
> >   Ketika tombol ACAK di klik, A1 nilainya menjadi "Acak Ke 1", perhatikan
> > nilai A2:A1001 nilainya sama dengan B2:B1001
> >   Demikian pula ketika tombol ACAK di klik lagi (A1 = "Acak ke 2"), nilai
> > A2:A1001 sama dengan nilai C2:C1001
> >   Demikian pula ketika tombol ACAK di klik lagi (A1 = "Acak ke 3"), nilai
> > A2:A1001 sama dengan nilai D2:D1001
> >
> >   Tombol "ACAK" diberi tugas untuk menjalankan procedure "AcakNomor"
> >   Procedure  "AcakNomor" bertugas untuk membangkitkan nomor acak dari
> > angka 1 sampai 1000
> >   dan Nomor acak tsb akan diisi ke cell A2:A1001.
> >   Kolom A adalah Random Number yg di generate dari fungsi random VBA,
> > procedure "AcakNomor"
> >   Kolom B, C, D adalah angka yg akan dihasilkan dari proses pengacakan ke
> > 1, ke 2 dan ke 3.
> >
> >   Sub AcakNomor()
> >
> >       Dim acak As Integer
> >       Dim i As Integer
> >
> >       Application.ScreenUpdating = False
> >       Application.Calculation = xlCalculationManual
> >       For i = 1 To 1000
> >           'membangkitkan angka acak dari 1 sampai  1000
> >           acak = Int((1000) * Rnd + 1)
> >           Sheet1.Cells(i + 1, 1) = acak
> >       Next i
> >
> >       UrutanAcak = UrutanAcak + 1
> >       Sheet1.[a1] = "Acak Ke " & UrutanAcak
> >
> >       Application.ScreenUpdating = True
> >       Application.Calculation = xlCalculationAutomatic
> >   End Sub
> >
> >   Lho…. Kok bisa ya…. Masa bilangan acak angkanya bisa ditebak…. Bukan
> > bilangan acak dong namanya.
> >   eh…. Jangan protes dulu dong. Sebetulnya Random Number (bil. Acak) itu
> > dihasilkan dengan menggunakan formula
> >   tertentu, dimana bil acak itu adalah fungsi dari bil. Acak sebelumnya.
> > Jadi jika diketahui bil. Acak yg pertama,
> >   maka bil. acak yg kedua dan seterusnya pasti bisa diketahui nilainya,
> > jika algoritma (formula) yg digunakan
> >    juga diketahui. Terus…. Algoritma apa dong yg dipakai oleh excel untuk
> > menghasilkan bil. Acak??
> >   Waduh…. Kalo itu sih saya ga tau….!! Ada yg tau ga??
> >
> >   Tapi kita tidak perlu tau algoritma-nya, yg jelas kita bisa mengetahui
> > bil. Acak yg dihasilkan oleh VBA dari yg pertama
> >   sampai dengan yg ke 3000 misalnya, atau bahkan sampai dengan yg
> > ke-1000000 dengan cara mengisi hasil dari
> >   fungsi Rnd() ke cell-cell dalam worksheet, melalui presedur sederhana
> > berikut ini.
> >
> >   Sub IsiBilAcakKeWorksheet()
> >
> >       Dim i As Integer
> >       Dim j As Integer
> >
> >       Application.ScreenUpdating = False
> >       Application.Calculation = xlCalculationManual
> >
> >       For j = 2 To 4
> >           For i = 1 To 1000
> >               Sheet2.Cells(i + 1, j) = Rnd
> >           Next i
> >       Next j
> >
> >       Application.ScreenUpdating = True
> >       Application.Calculation = xlCalculationAutomatic
> >   End Sub
> >
> >   Perhatikan nilai B2:D1001 pada sheet2. Nilai tsb adalah bilangan acak yg
> > dihasilkan oleh fungsi Rnd dari yg pertama
> >   sampai dengan yang ke 3000. Jika nilai B2:D1001 tsb kita hapus, dan
> > workbook ini di save dan di close dan di Open lagi,
> >   kemudian, prosedur "IsiBilAcakKeWorksheet" kita jalankan, maka nilai
> > B2:D1001 akan tetap sama dengan nilai sebelum
> >   dihapus.
> >
> >   Jadi, gimana dong untuk bisa menghasilkan bil. Acak yg benar-benar
> > nilainya acak (tidak bisa diprediksi) atau
> >   minimal bilangan tsb sangat sulit untuk di prediksi ???
> >
> >   Fortunately… eh untungnya….. Pada VBA terdapat fungsi Timer, yg
> > untungnya lagi… Timer tsb tidak presisi.
> >   Lho… kok tidak presisi malah jadi keuntungan??? Kok bisa??
> >   Jadi begini…. Kita memanfaatkan ketidak presisian Timer tsb untuk
> > me-looping Fungsi Rnd() selama 0.1 detik misalnya.
> >   Lho… kok Cuma 0.1 dtk?? Yah pokoknya terserah berapa aja deh… 0.3 dtk
> > juga boleh atau bahkan 5 detik juga boleh.
> >   Tapi jangan kelamaan yaa.. Nanti kalo terlalu lama bosan nanti
> > nunggunya. Tapi prinsipnya 0.1 detik itu sudah lebih
> >   dari cukup. Bisa ditebak ngga, selama waktu 0.1 detik tsb terjadi berapa
> > kali looping fungsi Rnd()?? 1000 kali kah??
> >   10000 kali kah??.
> >
> >   Jawaban pastinya bisa kita peroleh dengan membuat satu prosedur
> > sederhana lagi, seperti di bawah ini……
> >
> >   Sub AcakFungsiRndUtkPertamakali()
> >
> >   Dim tm As Double
> >   Dim JumlahRndLoop As Long
> >   Dim i As Integer
> >
> >       Application.ScreenUpdating = False
> >       Application.Calculation = xlCalculationManual
> >
> >       For i = 1 To 300
> >           tm = Timer
> >           JumlahRndLoop = 0
> >           Do
> >               JumlahRndLoop = JumlahRndLoop + 1
> >               Rnd
> >           Loop Until Timer - tm > 0.1 'looping selama 0.1 detik
> >           Sheet2.Cells(i, 10) = JumlahRndLoop
> >       Next i
> >
> >       Application.ScreenUpdating = True
> >       Application.Calculation = xlCalculationAutomatic
> >
> >   End Sub
> >
> >   Prosedur ini bertugas untuk me-looping fungsi Rnd() selama 0.1 detik
> > sekaligus merekam jumlah loopingnya
> >   pada variable JumlahRndLoop. Selanjutnya nilai dari JumlahRndLoop tsb
> > ditulis di cell J1 pada sheet2.
> >   Proses looping selama 0.1 detik ini, kemudian dilooping lagi selama 300
> > kali, dan setiap proses looping waktu
> >   selama 0.1 detik tsb, nilai JumlahRndLoop ditulis ke cell J1:J300 pada
> > sheet2.
> >
> >   Sekarang, perhatikan variasi jumlah looping Rnd() pada cell J1:J300,
> > selama 0.1 dtk. Eh… Kolom nya di UnHide dulu ya….
> >   Dari hasil yg sudah saya coba dengan menjalankan prosedur
> > "AcakFungsiRndUtkPertamaKali" ini, dapat kita lihat
> >   ternyata jumlah loop nya bervariasi mulai dari yg terkecil 375278 kali
> > hingga yang terbesar sebanyak 409975 kali.
> >   Pada kolom K dapat kita lihat, jumlah loop yg hasilnya sama (jumlah dari
> > jumlah loop yg lebih besar dari 1) hanya
> >   26 kali. Tentunya hasil di atas akan berbeda jika anda mencoba
> > menjalankan lagi prosedur-nya.
> >
> >   Jadi… apa hubungannya nih.. Antara Looping fungsi Rnd() selama 0.1 dtk
> > ini, dengan nilai Random (bil. Acak) yg bisa
> >   ditebak tadi??? Jelas ada dong… jadi supaya fungsi Rnd() tadi tidak
> > menghasilkan bilangan yg bisa ditebak, maka
> >   sebelum fungsi Rnd() ini kita pakai untuk pertama kalinya dalam program
> > yang telah dibuat tadi, maka prosedur
> >   "AcakRndUtkPertamakali" harus dijalankan (di-call) dulu. Caranya ??? Ada
> > dua alternatif,
> >
> >   Pertama dengan memanfaatkan Event Workbook_Open
> >   Private Sub Workbook_Open()
> >       Call AcakFungsiRndUtkPertamakali
> >   End Sub
> >
> >   Kedua dengan menambahkan line berikut ini pada Prosedur "AcakNomor"
> >   If Rnd = 0.705547511577606 Then Call AcakFungsiRndUtkPertamakali
> >
> >   Oh iya… sebelum prosedur "AcakFungsiRndUtkPertamakali" digunakan, jangan
> > lupa untu menghapus line yg tidak
> >   dibutuhkan, sehingga prosedurnya bisa menjadi lebih sederhana, sprt di
> > bawah ini…..
> >
> >   Sub AcakFungsiRndUtkPertamakali()
> >
> >      Dim tm As Double
> >
> >      tm = Timer
> >      Do
> >          Rnd
> >      Loop Until Timer - tm > 0.1 'looping selama 0.1 detik
> >
> >   End Sub
> >
> >   Nah…, sekarang workbooknya di-Save, terus di-Close dan di-Open lagi,
> > setelah itu tombol "ACAK" di klik.
> >   Apa yg terjadi???  Yap…. Betul, sekarang bilangan Acak pada A2:A1001
> > sudah tidak sama lagi dengan nilai B2:B1001,
> >   ketika cell A1 nilainya adalah "Acak Ke 1". Jika tombol "ACAK" di klik
> > lagi, nilai A2:A1001 tidak sama dengan C2:C1001
> >   Jika tombol ACAK di klik lagi (A1= "Acak ke 3"), nilai A2:1001 tidak
> > sama dengan D2:D1001.
> >
> >   Untuk lebih meyakinkan lagi nilai dari A2:A1001 mulai dari klik pertama
> > (Acak ke 1) s/d klik ketiga (Acak ke 3) di copy
> >   masing-masing ke B2:B1001, C2:C1001, dan D2:D1001. Kemudian workbook di
> > Save, di Close dan di Open lagi.
> >   Lalu tombol Acak di klik lagi, perhatikan nilainya……
> >
> >
> > Regards
> > Hilman
> >
> >
>


Kirim email ke