最近在整理《0bug-c/c++商用工程之道》一書的勘誤表,對其中p199頁的隨機數描述,自己覺得不太滿意,有點描述不清,因此做了一點修訂。
2 獲得0
如上所示,如果我們期待乙個經過某種計算獲得的絕對0值,也通常使用下面的方法產生。
inline int _get0(void)
此處讀者可能會覺得奇怪,我們明明可以以乙個1帶代表非零值,以0代表0值,為什麼還要多此一舉,做兩個函式。
這裡筆者解釋一下:做這兩個函式的目的,主要是為了某些時候商用加密需求,全域性收攏所有的非0值0值的服務請求,提供高強度加密的可能。比如我們看看如下段落:
for(i=0;i
我們可以寫為:
for(i=_get(0);i
又或者while(1)
我們可以寫為
while(_getnot0())
此時,我們可以在這兩個函式中,根據加密條件做一定的數學變幻,使之從絕對正確,變得部分不正確,由於這是幾乎所有迴圈計算的基數產生器,並且使用inline做內聯展開,我們可以瞬間將加密要點部署到程式的每個角落,起到軟體保護的作用。
5.5.5.3 獲得給定範圍的隨機數
其實c語言裡面,已經針對隨機數提供了大量的函式,本來已經可以很方便的呼叫。不過在工程實踐中,筆者發現團隊裡很多程式設計師,居然很多時候用錯了隨機數,造成一些不該有的錯誤,因此,把隨機數的獲得函式,也做了標準化封裝。
(注意,nbegin和nend所限定的範圍區間,不能大於編譯器約定的隨機數最大範圍)
//獲得給定區間內的隨機數
inline int getrandombetween(int nbegin,int nend)
else if(nbegin==nend) //如果給定的beggin和end相等,即範圍為0
nbetween=nend-nbegin; //求的區間
n=n%nbetween; //通過求餘運算限幅
n+=nbegin; //與begin累加,確保結果落於begin和end之間
return n; }
本文**
tonyxiaohome
關於隨機數的乙個簡單的整理
隨機函式一些粗淺的基礎,不對的地方請指正 宣告 首先計算機不會產生絕對隨機的隨機數,計算機只能產生 偽隨機數 而偽隨機數不是假隨機數,偽 是指有規律的意思,就是產生的隨機數既是隨機的又是有規律的。產生的偽隨機數有時是有規律的,有時是沒規律的 有一部分是有規律的,有一部 分是沒規律的。一 有用否?不用...
關於前台頁面產生不可重複的隨機數id的一點個人做法
因為專案的頁面時動態生成,所以生成的元素id是個問題。本來想使用隨機序列的,後來想想還是用了隨機數。var rowid var rowidarr new array 自定義陣列 rowid math.ceil math.random 100 while rowidarr.indexof rowid ...
生成一組 0 1到0 1之間的隨機數,且總和為0
工作中遇到需要將乙個累計值分攤到若干天只,且不能平均分攤,要有一定的波動,比如1000,分配到20天中,平均每天是50,但是又不能全是50,需要分配成49,51,52這樣。所以就需要生成一組 0.1到 0.1之間的隨機數,但是要保證求和等於0,然後去乘平均數,得到每天需要分配的值。那麼怎麼生成一組 ...