程式設計技巧乾貨筆記 快速偽隨機數生成

2021-08-07 13:32:37 字數 1609 閱讀 4327

遊戲中自己實現乙個偽隨機數生成器在除錯的時候會很方便

下面這個偽隨機數生成方法是在"雷神之鎚"的原始碼中看到的,記錄下來,方便以後使用

首先有乙個隨機數種子,相同的種子將產生出相同的偽隨機數列

int seed = 1; // 隨機數種子

void q_srand(int s)

快速生成乙個整型偽隨機數,裡面比較神奇的數字就是 69069了

int q_rand(int *seed)

快速生成乙個 [0, 1] 內的偽隨機小數

float q_random(int *seed)

這種隨機數生成方法的雜湊性是不錯的,足夠一般遊戲使用

在除錯的時候可以設定乙個常量作為隨機數,方便問題的重現在需要乙個真正的隨機源的時候可以使用當前系統時間或者其它途徑

【關於生成一定範圍內的隨機數坑】

常用的生成[a, b]範圍內隨機數的方法  rand() % (b - a + 1) + a

這個做法除非 (b - a + 1) 可以整除 rand_max, 否則不是所有值出現的概率都是相等的

乙個簡單的解決方法就是先將隨機數對映到 [0, 1] 內再放縮致 [a, b] 內

float v = static_cast(rand()) / rand_max;

int randval = static_cast(v * (b - a + 1) + a);

【當前有效的隨機數生成演算法】

well 演算法

馬特塞特旋轉演算法

程式設計技巧乾貨筆記 關於一些運算子的效率

下面有兩行實現同樣功能的 1 str str i 2 str i 它們都只是在字串的末尾新增了乙個 i 但是就效率而言,2 是優於 1 的 其效率相差在於返回值 前者需要將加法運算的結果構造乙個新的字串返回再賦值給 str 而且 運算的返回值是 str 的引用 後者直接在當前字串上修改然後返回 st...

乾貨 pandas常用技巧筆記

下面以 注釋的形式進行記錄 為模組新增別名 import pandas as pd 建立dataframe df pd.read csv rfm trad flow.csv encoding gbk df pd.dataframe columns transid cumid time amount ...

ASP生成偽引數程式設計技巧

前兩天在做乙個站內版的企搜引擎,發現某些站點可以鏈結站點內容。奇怪之下看了看,原來是按照資料庫id的自動編號規律進行鏈結的 閒暇之餘弄了下面這個東東,希望對大家在以後的編寫asp程式中有所幫助!生成指定位數的隨機數字 也可以用guidy寫的ixuer rnd str函式,自帶15種樣式,可以偽md5...