我相信这样产生的0~9999之间的随机数绝对够随机: #include <windows.h> #include <conio.h> int i; void main() { cprintf("Please press space bar to generate random number between 0 and 9999 ...\r\n"); i=0; while (1) { if (_kbhit()) break; Sleep(1); i++; if (i>=10000) i=0; } _getch(); cprintf("%d\r\n",i); }
本帖最后由 bcrun 于 2011-04-12 09:15:18 编辑
Int((范围) * Rnd) + 基数 范围=上限-基数+1
软件产生的随机数都是伪随机数。随机数并不仅仅是偶然产生的数,而是服从随机概率分布的一组数。比如 [0, 9) 上的n个随机数,那么一个试验就是当 n 趋向无穷大的时候,任意数字出现的数量接近 n/10。再比如,另一个试验是,任意从上述序列中抽取10个数,它的平均数服从近似的正态分布。这样的实验可以举出很多。所谓伪随机数,必然是能够通过绝大部分试验,但是总有一些试验无法通过。
自己写过一个伪随机数生成类 C++写的 vb就直接用rnd吧
我相信这样产生的0~9999之间的随机数是真随机而非伪随机: #include <windows.h> #include <conio.h> int i; void main() { cprintf("Please press space bar to generate random number between 0 and 9999 ...\r\n"); i=0; while (1) { if (_kbhit()) break; Sleep(1); i++; if (i>=10000) i=0; } _getch(); cprintf("%d\r\n",i); }
Private Sub Command4_Click() Debug.Print Int(20 * Rnd() + 1) 'Int((范围) * Rnd) + 基数 范围=上限-基数+1 End Sub
除极少数情况,RND完全可以解决了,用不着费心去再写其他函数.
如果包含小数的话 难道是把范围扩大再除以相应扩大的倍数? 那么两位小数的话 Private Sub Command1_Click() Randomize Text1.Text = [Int(1901 * Rnd) + 100]/100 End Sub
#include <windows.h>
#include <conio.h>
int i;
void main() {
cprintf("Please press space bar to generate random number between 0 and 9999 ...\r\n");
i=0;
while (1) {
if (_kbhit()) break;
Sleep(1);
i++;
if (i>=10000) i=0;
}
_getch();
cprintf("%d\r\n",i);
}
Int((范围) * Rnd) + 基数
范围=上限-基数+1
软件产生的随机数都是伪随机数。随机数并不仅仅是偶然产生的数,而是服从随机概率分布的一组数。比如 [0, 9) 上的n个随机数,那么一个试验就是当 n 趋向无穷大的时候,任意数字出现的数量接近 n/10。再比如,另一个试验是,任意从上述序列中抽取10个数,它的平均数服从近似的正态分布。这样的实验可以举出很多。所谓伪随机数,必然是能够通过绝大部分试验,但是总有一些试验无法通过。
vb就直接用rnd吧
#include <windows.h>
#include <conio.h>
int i;
void main() {
cprintf("Please press space bar to generate random number between 0 and 9999 ...\r\n");
i=0;
while (1) {
if (_kbhit()) break;
Sleep(1);
i++;
if (i>=10000) i=0;
}
_getch();
cprintf("%d\r\n",i);
}
Private Sub Command4_Click()
Debug.Print Int(20 * Rnd() + 1) 'Int((范围) * Rnd) + 基数 范围=上限-基数+1
End Sub
那么两位小数的话
Private Sub Command1_Click()
Randomize
Text1.Text = [Int(1901 * Rnd) + 100]/100
End Sub