1. 程式人生 > >C++學習記錄6--srand(time(NULL)產生隨機數

C++學習記錄6--srand(time(NULL)產生隨機數

  • time() 函式:返回從1970/1/1 00:00:00到呼叫time()函式時所經過的時間,以秒為單位,所以是個整數。time(NULL)或time(0)表示在記憶體中不儲存返回的數值。標頭檔案:#include<time.h>
  • rand() 函式:呼叫一次隨機產生0-32767間的整形數。標頭檔案:#include<stdlib.h>
  • srand() 函式:定義rand()函式中seed的值。
      C++中使用rand()函式隨機。然而,rand()產生的並不是真正隨機數,而是偽隨機數,其本質是一個週期無限長的數列,每次呼叫rand(),就從該數列中某個位置開始取值。若程式在一次執行中多次呼叫rand(),則依次從這個數列中取值。然而,如果每次開始取值的位置(seed)是一樣的,那麼所產生的值是一樣的。為了解決這個問題,就要改變每次開始的位置(seed的值),由於時間是不斷變化的,所以自然想到用time(NULL)/time(0),這樣一來,呼叫rand()前,先定義srand(time(0)),就使得每次數列的開始位置不一樣(也可理解為使用seed計算得到了這個數列,每次seed不同,數列不同)。
      舉例:
#include<iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
void main()
{
    //A
    for(int i=0;i<10;i++)
    {
        srand(time(NULL));
        cout<<time(NULL)<<' '<<rand()<<'\n';
    }
}

  若把srand(time(NULL))放在迴圈裡,由於迴圈速度很快,時間在秒數的量級上沒有變化,所以總是用同一個seed對數列初始化,故多次執行,輸出的隨機數都是相同的。
  seed用time(0)初始化一次就好,置於迴圈中達不到產生隨機數的目的,應將其置於A行。

相關推薦

C++學習記錄6--srand(time(NULL)產生隨機數

time() 函式:返回從1970/1/1 00:00:00到呼叫time()函式時所經過的時間,以秒為單位,所以是個整數。time(NULL)或time(0)表示在記憶體中不儲存返回的數值。標頭檔案:#include<time.h> rand()

C++中的srand(time(null))利用時間設定隨機種子產生隨機數

   首先需要宣告的是,計算機不會產生絕對隨機的隨機數,計算機只能產生“偽隨機數”。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。    偽隨機數並不是假隨機數,這裡的“偽”是有規律的

c語言中 srand(time(NULL)); 這句話是什麽意思(尤其是 NULL

什麽 返回值 產生 con 現在時間 完成 時間 一個 div 這是兩個函數! srand函數 一個是srand函數!這是在調用rand()這個函數之前使用的!rand()是一個產生隨機數的函數!而srand是一個設置隨機數種子的函數!通常這兩個函數是一起使用的!來完成

linux學習記錄.6.vscode調試c makefile

void 打開 lin out () tasks pick oid touch 參考 https://www.cnblogs.com/lidabo/p/5888997.html task有更新,不能使用文章的代碼。 多文件 終端 touch main.c hw.c hw.

C++學習記錄

using 記錄 images block c++ blocks 錯誤提示 mage 可能 2017.09.02 今天使用codeblocks來寫一個Cat類,但是編譯的時候遇到“error: ‘string‘ does not name a type“的錯誤提示。 解

40、我的C#學習筆記6

c#表達式:表達式是由運算符和操作數組成的。運算符設置對操作數進行什麽樣的運算。例如:+、-、*、/都是運算符,操作數包括文本、常量、變量和表達式。運算符:運算符是一些特殊的符號,主要用於數學函數、一些類型的賦值語句和邏輯比較方面。C#中提供了豐富的運算符,如:算術運算符、賦值運算符、比較運算符等。算術運算符

const修飾符、const與指標一起使用(C++學習筆記 6

一、 在C++中使用const修飾符來定義常量。(const來自單詞constant,是常量的意思) 用法:const 型別 常量名 = 表示式; 例如:const int LIMIT = 100; 這個常量LIMIT是有型別的,佔用儲存單元,有地址,可以用指標指向它,但不能修改它。

c++學習記錄之類

c++是面向物件的程式語言     面對物件就是: 把資料及對資料的操作方法放在一起,作為一個相互依存的整體——物件。對同類物件抽象出其共性,形成類。類中的大多 數資料,只能用本類的方法進行處理。類通過一個簡單的外部介面與外界發生關係,物件與物

PS學習記錄6--html5 canvas+js實現ps鋼筆摳圖

html5 canvas+js實現ps鋼筆摳圖 1. 專案要求需要用js實現photoshop中鋼筆摳圖功能,就用了近三四天的時間去解決它,最終還是基本上把他實現了。     做的過程中走了不少彎路,最終一同事找到了canvans以比較核心的屬性globalCo

C++學習記錄2】CC++的升級

C++繼承了所有的C特性; C++在C的基礎上提供了更多的語法和特性; C++的設計目標是執行效率和開發效率(比C語言還高)的統一。 (C++中++的體現)C++是C語言的進化和升級。最重要的是兩個方面,其一是型別的加強(型別檢查更嚴格),其二是天生面向物件的支援(內建天生支援面向物件軟

C++學習記錄1】學習C++的意義

UINX誕生之初使用匯編語言編寫的。隨著UINX的發展,組合語言成為了其發展的掣肘。如何提高UINX的開發效率呢? 在1971年,K&D來發出C語言,由解釋型語言(B語言)變成編譯型語言。 C語言天生就是為了開發作業系統而存在的,其目標是高效,最終程式執行效率高。但是起初是用來編寫U

C++學習筆記(6)

面向物件程式設計: 1.物件和類 (1)宣告類: 類定義了物件的屬性和行為。         一個物件的狀態: 用資料域以及他們的當前值來表示。         一個物件的行為,由一組函式確定。         所以在c++類中,用變數定義資料域,用函式來定義行為

(C/C++學習心得)6.陣列指標和指標陣列

說明:int (*p)[4] 和 int *p[4](陣列指標和指標陣列),如果你是一個初學者,也許當你看到這兩個名詞的時候,已經懵了。其實,只要你理解了其中的含義.這兩個名詞對你來說會相當簡單並且很有趣,下面,我們就來深入探討一下究竟什麼是陣列指標,什麼是指標陣列。 一.指標陣列 1.前面我們已經學過陣列

Effective C++ 學習筆記6 資源管理

為了防止資源洩漏,請使用RAII物件,它們在建構函式中獲得資源並在解構函式中釋放資源; 兩個常被使用的RAII classes分別是tr1::shared_ptr和auto_ptr,前者通常是較佳選擇,因為copy行為比較直觀。若選擇auto_ptr,複製動作會使它指向null; 複製RAII物件必須一併複

C-學習筆記6-指標基礎

1.變數的地址           在計算機中,記憶體是連續的儲存空間。為了便於對其中某個指定部分進行操作,要對記憶體進行編址,記憶體編址的基本單位為位元組。對於程式中定義的變數,編譯時根據它的型別給它分配一定程度的記憶體單元。分配給每個變數的記憶體單元的起始地址。編譯後每

Objective-C 學習記錄

1.UINavigationController導航控制器的建立 UINavigationController是一種特殊的控制器,用於管理多控制器之間的跳轉,常見的例子是iPhone的設定 UINavigationController的使用步驟: (1).初始化UINavi

focaltech(敦泰)觸控式螢幕驅動Ft5306.c學習記錄

最近正在做安卓系統的驅動開發工作,學習了focaltech(敦泰)觸控式螢幕驅動Ft5306.c,簡單總結如下(未完,待續)。因為剛接觸驅動開發,許多知識沒有徹底理解,如有錯誤請指正。 1 概述    linux觸控式螢幕驅動基於linux input 子系統,層次上位於input系統的第三層,主要是完成具

TF學習筆記6Time Travel with tf)

在上一個教程中,我們討論了tf和time的基本概念。本教程將更進一步,並展示一個最強大的技巧。 1 時間旅行 那麼讓我們回到上一個教程中我們結束的地方。轉到您的教程包: $ roscd learning_tf 並開啟檔案src / turtle_tf_listener.cpp。看

TensorFlow學習記錄-- 6.百度warp-ctc 引數以及測試例子2解釋

1 百度CTC 2 CTC詳解 總的來說就是想不對齊標籤,來設計一個loss,通過最小化這個loss,可以得到精確的識別效果(即最後還能在不對齊標籤的情況下解碼出來),在語音識別方面效果和優勢明顯。 未完待續 3 解讀百度warp-ctc引數

c++學習記錄:operator = 過載

  《effective c++》的確是一本神書,閱讀起來的感覺可以用酣暢淋漓來形容,似乎很多以前沒有在意的小細節都變得豁然開朗了起來,在條款10中,scott建議我們過載操作符’=’時,返回一個*this的引用。   賦值,我們往往可以寫作連鎖形式: