PHP 与 C 中的随机数
计算机程序是从确定的起点到达确定的终点,整个运行过程都是确定的,所以,生成一个随机数就让程序有点小痛苦了,如下面的小程序:
#include <stdio.h>
int get_random(int a){
return rand() % a;
}
int main(int argc , char *argv[]){
int N = 10;
int num = 10;
int i;
for(i = 0 ; i < N ; i++){
printf("%d => %d\n", i, get_random(num));
}
}
int get_random(int a){
return rand() % a;
}
int main(int argc , char *argv[]){
int N = 10;
int num = 10;
int i;
for(i = 0 ; i < N ; i++){
printf("%d => %d\n", i, get_random(num));
}
}
我可以肯定的说:在我的机器上运行10000000的结果都是一个样子的,如下:
zyf@zhangyufeng:~/C$ ./random
0 => 3
1 => 6
2 => 7
3 => 5
4 => 3
5 => 5
6 => 6
7 => 2
8 => 9
9 => 1
0 => 3
1 => 6
2 => 7
3 => 5
4 => 3
5 => 5
6 => 6
7 => 2
8 => 9
9 => 1
这样问题就出现了,这种伪随机数每次出现的都一样,导致扑克牌游戏中每次抓到的牌都是一样的,咋整? 于是C中还有一个叫seed的东西,就是说把这个人工设置的seed值加入到随机器的计算中去。但是,这个seed值应该可以随时变化,时间是一个很帅的考虑对象,实现如下:
#include <stdio.h>
#include <time.h>
int get_random(int a){
srand(time(NULL));
return rand() % a;
}
int main(int argc , char *argv[]){
int N = 10;
int num = 10;
int i;
for(i = 0 ; i < N ; i++){
sleep(1);
printf("%d => %d\n", i, get_random(num));
}
}
#include <time.h>
int get_random(int a){
srand(time(NULL));
return rand() % a;
}
int main(int argc , char *argv[]){
int N = 10;
int num = 10;
int i;
for(i = 0 ; i < N ; i++){
sleep(1);
printf("%d => %d\n", i, get_random(num));
}
}
接下来是PHP的随机数,和C中几乎一模一样,不过PHP中的rand函数基本上已经不需要srand的,它本身就可以提供不断变化的随机数:
<?php
//有些计算机上$num不能大于32678
function get_random($num){
//srand(time());
return rand(0, $num);
}
$num = 10;
for ($i = 0 ; $i < 10 ; $i++){
//sleep(1);
echo $i, ' => ', get_random($num) , "\n";
}
?>
//有些计算机上$num不能大于32678
function get_random($num){
//srand(time());
return rand(0, $num);
}
$num = 10;
for ($i = 0 ; $i < 10 ; $i++){
//sleep(1);
echo $i, ' => ', get_random($num) , "\n";
}
?>
-------------------------------------------------------------------------------------------------------------------------------
太简单的东西,没啥技术含量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
2008-08-13 Mac OSX 10.4.8下AC97声卡的完美安装
2008-08-13 Mac OSX 10.4.8 tiger 下BCM5788网卡的完美安装