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
> >
> >
>