當(dāng)前位置:
首頁 >
获取系统信息2——linux中使用随机数
發(fā)布時(shí)間:2023/12/20
50
豆豆
生活随笔
收集整理的這篇文章主要介紹了
获取系统信息2——linux中使用随机数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以下內(nèi)容源于朱有鵬《物聯(lián)網(wǎng)大講堂》課程的學(xué)習(xí)整理,如有侵權(quán),請(qǐng)告知?jiǎng)h除。
1、隨機(jī)數(shù)和偽隨機(jī)數(shù)
- 隨機(jī)數(shù)是隨機(jī)出現(xiàn),沒有任何規(guī)律的一組數(shù)列。
- 真正的完全隨機(jī)的數(shù)列是不存在的,只是一種理想情況。
- 一般只能通過一些算法得到一個(gè)偽隨機(jī)數(shù)序列。
- 平時(shí)說到隨機(jī)數(shù),基本都指的是偽隨機(jī)數(shù)。
2、linux中隨機(jī)數(shù)相關(guān)API
- 連續(xù)多次調(diào)用rand函數(shù)可以返回一個(gè)偽隨機(jī)數(shù)序列;
- srand函數(shù)用來設(shè)置rand獲取的偽隨機(jī)序列的種子。
3、實(shí)戰(zhàn)演示
#include <stdio.h> #include <stdlib.h>int main(int argc, char **argv) {int i = 0, val = 0;/* if (argc != 2){printf("usage: %s num\n", argv[0]);return -1;} */ printf("RAND_MAX = %d.\n", RAND_MAX); // 2147483647//srand(atoi(argv[1]));srand(time(NULL));for (i=0; i<6; i++){val = rand();printf("%d ", (val % 6));}printf("\n");return 0; }- 單純使用rand重復(fù)調(diào)用n次,就會(huì)得到一個(gè)0-RAND_MAX之間的偽隨機(jī)數(shù),如果需要調(diào)整范圍,可以得到隨機(jī)數(shù)序列后再進(jìn)行計(jì)算。
- 單純使用rand來得到偽隨機(jī)數(shù)序列有缺陷,每次執(zhí)行程序得到的偽隨機(jī)序列是同一個(gè)序列,沒法得到其他序列;
- rand內(nèi)部的算法是通過一個(gè)種子(seed,其實(shí)就是一個(gè)原始參數(shù),int類型),rand內(nèi)部默認(rèn)是使用1作為seed的,種子一定的算法也是一定的,那么每次得到的偽隨機(jī)序列肯定是同一個(gè)。
- 要想每次執(zhí)行這個(gè)程序獲取的偽隨機(jī)序列不同,則每次都要給不同的種子。用srand函數(shù)來設(shè)置種子。
4、總結(jié)和說明
- 在每次執(zhí)行程序時(shí),先用srand設(shè)置一個(gè)不同的種子,然后再多次調(diào)用rand獲取一個(gè)偽隨機(jī)序列,這樣就可以每次都得到一個(gè)不同的偽隨機(jī)序列。
- 一般常規(guī)做法是用time函數(shù)的返回值來做srand的參數(shù)。
5、在linux系統(tǒng)中獲取真正的隨機(jī)數(shù)
- linux系統(tǒng)收集系統(tǒng)中的一些隨機(jī)發(fā)生的事件的時(shí)間(譬如有人動(dòng)鼠標(biāo),譬如觸摸屏的操作和坐標(biāo)等)作為隨機(jī)種子去生成隨機(jī)數(shù)序列。
總結(jié)
以上是生活随笔為你收集整理的获取系统信息2——linux中使用随机数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件需求说明书/ 概要设计说明书/项目开
- 下一篇: 细粒度权限控制 linux,利用dock