本公開是關(guān)于電子技術(shù)領(lǐng)域,尤其是關(guān)于一種生成隨機(jī)數(shù)的方法和裝置。
背景技術(shù):
隨著電子技術(shù)的發(fā)展,手機(jī)、計(jì)算機(jī)等終端得到了廣泛的應(yīng)用,相應(yīng)的終端功能越來越豐富。終端在實(shí)現(xiàn)某些功能時(shí),往往需要生成隨機(jī)數(shù),比如生成[0,1)之間的64位雙精度浮點(diǎn)數(shù)。
生成[0,1)之間的64位雙精度浮點(diǎn)數(shù)的方法一般是:生成64位整型隨機(jī)數(shù),然后,采用cvtsi2sd指令將64位整型隨機(jī)數(shù)轉(zhuǎn)換為浮點(diǎn)隨機(jī)數(shù),最后,將轉(zhuǎn)換的浮點(diǎn)隨機(jī)數(shù)乘以1與64位雙精度浮點(diǎn)數(shù)中的最大值的商,得到隨機(jī)生成結(jié)果。
在實(shí)現(xiàn)本公開的過程中,發(fā)明人發(fā)現(xiàn)至少存在以下問題:
基于上述處理方式,在得到64位浮點(diǎn)數(shù)時(shí),需要執(zhí)行耗時(shí)較長的cvtsi2sd指令和乘法運(yùn)算,從而,導(dǎo)致隨機(jī)數(shù)的生成效率較低。
技術(shù)實(shí)現(xiàn)要素:
為了克服相關(guān)技術(shù)中存在的隨機(jī)數(shù)的生成效率較低的問題,本公開提供了一種生成隨機(jī)數(shù)的方法和裝置。所述技術(shù)方案如下:
根據(jù)本公開實(shí)施例的第一方面,提供一種生成隨機(jī)數(shù)的方法,所述方法包括:
隨機(jī)生成第一預(yù)設(shè)位數(shù)的第一整數(shù);
通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)區(qū)間為[0.5,1)或(-1,-0.5];
根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量;
將所述第一浮點(diǎn)數(shù)與所述第二浮點(diǎn)數(shù)相加,得到位于第二預(yù)設(shè)區(qū)間內(nèi)的所述第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù),作為隨機(jī)數(shù)生成結(jié)果,其中,所述第二預(yù)設(shè)區(qū)間為[0,1)。
可選的,所述通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),包括:
通過將所述第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù);
通過將所述第二整數(shù)與第二預(yù)設(shè)數(shù)值進(jìn)行或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為1、剩余位數(shù)的數(shù)值為零,所述第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位的數(shù)值。
可選的,所述當(dāng)所述第一預(yù)設(shè)位數(shù)為64時(shí),所述第二預(yù)設(shè)位數(shù)為52,當(dāng)所述第一預(yù)設(shè)位數(shù)為32,所述第二預(yù)設(shè)位數(shù)為23。
可選的,所述根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量,包括:
如果所述第一整數(shù)的最高位的數(shù)值為零,則根據(jù)賦值bzhi指令,得到第二浮點(diǎn)為零;
如果所述第一整數(shù)的最高位的數(shù)值為1,則根據(jù)所述bzhi指令,得到第二浮點(diǎn)為區(qū)間調(diào)整偏移量。
可選的,所述區(qū)間調(diào)整偏移量為小于1的最大浮點(diǎn)數(shù)。
根據(jù)本公開實(shí)施例的第二方面,提供一種生成隨機(jī)數(shù)的裝置,所述裝置包括:
生成模塊,用于隨機(jī)生成第一預(yù)設(shè)位數(shù)的第一整數(shù);
轉(zhuǎn)化模塊,用于通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)區(qū)間為[0.5,1)或(-1,-0.5];
確定模塊,用于根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量;
相加模塊,用于將所述第一浮點(diǎn)數(shù)與所述第二浮點(diǎn)數(shù)相加,得到位于第二預(yù)設(shè)區(qū)間內(nèi)的所述第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù),作為隨機(jī)數(shù)生成結(jié)果,其中,所述第二預(yù)設(shè)區(qū)間為[0,1)。
可選的,所述轉(zhuǎn)化模塊,用于:
通過將所述第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù);
通過將所述第二整數(shù)與第二預(yù)設(shè)數(shù)值進(jìn)行或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為1、剩余位數(shù)的數(shù)值為零,所述第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位的數(shù)值。
可選的,所述當(dāng)所述第一預(yù)設(shè)位數(shù)為64時(shí),所述第二預(yù)設(shè)位數(shù)為52,當(dāng)所述第一預(yù)設(shè)位數(shù)為32,所述第二預(yù)設(shè)位數(shù)為23。
可選的,所述確定模塊,用于:
如果所述第一整數(shù)的最高位的數(shù)值為零,則根據(jù)賦值bzhi指令,得到第二浮點(diǎn)為零;
如果所述第一整數(shù)的最高位的數(shù)值為1,則根據(jù)所述bzhi指令,得到第二浮點(diǎn)為區(qū)間調(diào)整偏移量。
可選的,所述區(qū)間調(diào)整偏移量為小于1的最大浮點(diǎn)數(shù)。
本公開的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
本公開實(shí)施例中,通過對(duì)隨機(jī)生成的第一整數(shù)進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),進(jìn)而,可以通過bzhi指令計(jì)算第二浮點(diǎn)數(shù),最后,將第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)相加,得到隨機(jī)數(shù)生成結(jié)果。往往邏輯運(yùn)算、bzhi指令和加法指令三者的耗時(shí)較少,其使用的總時(shí)間會(huì)小于cvtsi2sd指令和乘法運(yùn)算的耗時(shí),從而,可以提高隨機(jī)數(shù)的生成效率。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。
附圖說明
此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本公開的實(shí)施例,并與說明書一起用于解釋本公開的原理。在附圖中:
圖1是根據(jù)一示例性實(shí)施例示出的一種生成隨機(jī)數(shù)的方法流程圖;
圖2是根據(jù)一示例性實(shí)施例示出的一種邏輯運(yùn)算示意圖;
圖3是根據(jù)一示例性實(shí)施例示出的一種生成隨機(jī)數(shù)的裝置示意圖;
圖4是根據(jù)一示例性實(shí)施例示出的一種終端的結(jié)構(gòu)示意圖。
通過上述附圖,已示出本公開明確的實(shí)施例,后文中將有更詳細(xì)的描述。這些附圖和文字描述并不是為了通過任何方式限制本公開構(gòu)思的范圍,而是通過參考特定實(shí)施例為本領(lǐng)域技術(shù)人員說明本公開的概念。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本公開相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本公開的一些方面相一致的裝置和方法的例子。
本公開一示例性實(shí)施例提供了一種生成隨機(jī)數(shù)的方法,該方法可以用于終端或者服務(wù)器中。終端或者服務(wù)器中可以設(shè)置有處理器、存儲(chǔ)器,處理器可以用于生成第一預(yù)設(shè)位數(shù)的浮點(diǎn)隨機(jī)數(shù)的相關(guān)處理,存儲(chǔ)器可以用于存儲(chǔ)下述處理過程中需要和產(chǎn)生的數(shù)據(jù)。后續(xù)以執(zhí)行主體是終端為例,進(jìn)行方案的詳細(xì)說明,服務(wù)器與之類似,不再進(jìn)行贅述。
下面將結(jié)合實(shí)施方式,對(duì)圖1所示的處理流程進(jìn)行詳細(xì)的說明,內(nèi)容可以如下:
在步驟101中,隨機(jī)生成第一預(yù)設(shè)位數(shù)的第一整數(shù)。
在實(shí)施中,在終端的很多功能實(shí)現(xiàn)中,往往需要生成[0,1)之間的浮點(diǎn)數(shù),需要生成[0,1)之間的浮點(diǎn)數(shù)的時(shí)候,終端將會(huì)接收到生成指令,進(jìn)而,可以隨機(jī)生成預(yù)設(shè)位數(shù)(即第一預(yù)設(shè)位數(shù))的整數(shù)(即第一整數(shù)),其中,第一整數(shù)可以是以二進(jìn)制表示的整數(shù),第一預(yù)設(shè)位數(shù)可以是32位,也可以是64位。
在步驟102中,通過將第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),其中,第一預(yù)設(shè)區(qū)間為[0.5,1)或(-1,-0.5]。
在實(shí)施中,整數(shù)和浮點(diǎn)數(shù)的二進(jìn)制表示方式相同,均是用0或1表示,只是在轉(zhuǎn)化為十進(jìn)制時(shí),轉(zhuǎn)化方法不同。由于[0.5,1)之間的浮點(diǎn)數(shù)的前預(yù)設(shè)位數(shù)(最高位和指數(shù)位,其中,最高位為0時(shí),表示該數(shù)為正數(shù),最高位為1時(shí),表示該數(shù)為負(fù)數(shù))的數(shù)值是相同的、(-1,-0.5]之間的浮點(diǎn)數(shù)的前預(yù)設(shè)位數(shù)的數(shù)值也是相同的,[0.5,1)與(-1,-0.5]的前預(yù)設(shè)位數(shù)中只是最高位不同,即[0.5,1)與(-1,-0.5]的指數(shù)位相同,因此,可以將第一整數(shù)的前預(yù)設(shè)位數(shù)轉(zhuǎn)換為[0.5,1)或(-1,-0.5]內(nèi)的浮點(diǎn)數(shù)。如果最終將第一整數(shù)轉(zhuǎn)化為了(-1,-0.5]內(nèi)的浮點(diǎn)數(shù),后續(xù)可以通過區(qū)間調(diào)整偏移量,將其調(diào)整到[0,0.5),后續(xù)會(huì)對(duì)具體處理進(jìn)行詳細(xì)表述。
具體的,可以通過將第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于[0.5,1)或(-1,-0.5]的第一浮點(diǎn)數(shù),即將第一整數(shù)的前預(yù)設(shè)位數(shù)中的指數(shù)位轉(zhuǎn)化為[0.5,1)或(-1,-0.5]內(nèi)的浮點(diǎn)數(shù)的指數(shù)位上的數(shù)值。
可選的,可以先對(duì)第一整數(shù)進(jìn)行與運(yùn)算,再進(jìn)行或運(yùn)算,相應(yīng)的,步驟102的處理過程可以如下:通過將第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù);通過將第二整數(shù)與第二預(yù)設(shè)數(shù)值進(jìn)行或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為1、剩余位數(shù)的數(shù)值為零,第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位的數(shù)值。
在實(shí)施中,終端可以預(yù)先存儲(chǔ)有第一預(yù)設(shè)數(shù)值和第二預(yù)設(shè)數(shù)值,其中,第一預(yù)設(shè)數(shù)值可以用于與第一整數(shù)進(jìn)行與運(yùn)算,第二預(yù)設(shè)數(shù)值可以用于進(jìn)行或運(yùn)算,第一預(yù)設(shè)數(shù)值和第二預(yù)設(shè)數(shù)值也是用二進(jìn)制表示,均是第一預(yù)設(shè)位數(shù)的數(shù)值。為了使得第一整數(shù)可以轉(zhuǎn)化為[0.5,1)或(-1,-0.5]內(nèi)的浮點(diǎn)數(shù),可以不改變第一整數(shù)的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值,只改變指數(shù)位的數(shù)值。當(dāng)?shù)谝活A(yù)設(shè)位數(shù)為64時(shí),第二預(yù)設(shè)位數(shù)可以為52,當(dāng)?shù)谝活A(yù)設(shè)位數(shù)為32,第二預(yù)設(shè)位數(shù)可以為23,第一預(yù)設(shè)位數(shù)和第二預(yù)設(shè)位數(shù)指的是二進(jìn)制的位數(shù)。也就是說,第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值可以為1、剩余位數(shù)的數(shù)值可以為零,終端通過將第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù),其中,第二整數(shù)的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值與第一整數(shù)相同,剩余位數(shù)的數(shù)值為零。第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位上的數(shù)值,終端通過將其與第二整數(shù)或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,第一浮點(diǎn)數(shù)的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值與第一整數(shù)相同,剩余位數(shù)的數(shù)值為[0.5,1)或(-1,-0.5]對(duì)應(yīng)的第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù)的指數(shù)位上的數(shù)值。
例如,以第一預(yù)設(shè)位數(shù)為64為例,用16進(jìn)制表示,則[0.5,1)對(duì)應(yīng)的64位的浮點(diǎn)數(shù)的前12為3fe(最高位是符號(hào)位,剩余的11為指數(shù)位),[0.5,1)對(duì)應(yīng)的64位的浮點(diǎn)數(shù)位于0x3fe0000000000000-0x3fefffffffffffff之間,第一預(yù)設(shè)數(shù)值為0x800fffffffffffff,第二預(yù)設(shè)數(shù)值為0x3fe0000000000000,這樣,經(jīng)過與運(yùn)算、或運(yùn)算后,就可以將第一整數(shù)轉(zhuǎn)化到[0.5,1)或(-1,-0.5]內(nèi)的第一浮點(diǎn)數(shù),如圖2所示,以第一整數(shù)是0x4fexxxxxxxxxxxxx為例,說明第一整數(shù)轉(zhuǎn)化為第一浮點(diǎn)數(shù)的過程。
在步驟103中,根據(jù)賦值bzhi指令和第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量。
在實(shí)施中,得到第一浮點(diǎn)數(shù)后,終端可以根據(jù)賦值bzhi指令(其中,bzhi是一種現(xiàn)有指令的名稱,全稱是zerohighbitsstartingwithspecifiedbitposition),得到第二浮點(diǎn)數(shù),其中,第二浮點(diǎn)數(shù)可以用于當(dāng)?shù)谝桓↑c(diǎn)數(shù)位于(-1,-0.5]內(nèi)時(shí),將第一浮點(diǎn)數(shù)調(diào)整到[0,0.5),第二浮點(diǎn)數(shù)、第一浮點(diǎn)數(shù)均是第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù)。
可選的,bzhi指令可以根據(jù)第一整數(shù)中最高位的數(shù)值,輸出不同的數(shù)值,相應(yīng)的,步驟103的處理可以如下:如果第一整數(shù)的最高位的數(shù)值為零,則根據(jù)bzhi指令,得到第二浮點(diǎn)為零;如果第一整數(shù)的最高位的數(shù)值為1,則根據(jù)bzhi指令,得到第二浮點(diǎn)為區(qū)間調(diào)整偏移量。
在實(shí)施中,終端可以將bzhi指令的返回值,記為第二浮點(diǎn)數(shù)。在使用bzhi指令得到第二浮點(diǎn)數(shù)時(shí),可以設(shè)置bzhi指令的兩個(gè)參數(shù),其中,將bzhi指令的第一個(gè)參數(shù)設(shè)置為區(qū)間調(diào)整偏移量,第二個(gè)參數(shù)設(shè)置為上述第一預(yù)設(shè)數(shù)值右移第三預(yù)設(shè)位數(shù)(當(dāng)?shù)谝活A(yù)設(shè)位數(shù)為32時(shí),第三預(yù)設(shè)位數(shù)為26,當(dāng)?shù)谝活A(yù)設(shè)位數(shù)為64時(shí),第三預(yù)設(shè)位數(shù)為57),例如,對(duì)于第一預(yù)設(shè)位數(shù)為64的情況,第二浮點(diǎn)數(shù)=_bzhi_u64(0x3fefffffffffffff,第一預(yù)設(shè)數(shù)值>>57)。終端執(zhí)行bzhi指令后,會(huì)根據(jù)第一整數(shù)最高位的不同,輸出不同的數(shù)值,即如果第一整數(shù)的最高位的數(shù)值為零(此種情況說明,第一整數(shù)轉(zhuǎn)化為的第一浮點(diǎn)數(shù)位于[0,0.5)內(nèi)),則執(zhí)行bzhi指令得到的第二浮點(diǎn)為零,如果第一整數(shù)的最高位的數(shù)值為1(此種情況說明,第一整數(shù)轉(zhuǎn)化為的第一浮點(diǎn)數(shù)位于(-1,-0.5]內(nèi)),則執(zhí)行bzhi指令,得到的第二浮點(diǎn)為區(qū)間調(diào)整偏移量。也就是說,當(dāng)?shù)谝桓↑c(diǎn)數(shù)位于[0,0.5)內(nèi)時(shí),第二浮點(diǎn)數(shù)為零,當(dāng)?shù)谝桓↑c(diǎn)數(shù)位于(-1,-0.5]內(nèi)時(shí),第二浮點(diǎn)數(shù)為區(qū)間調(diào)整偏移量。bzhi指令的耗時(shí)往往較小,這樣可以快速確定出第二浮點(diǎn)數(shù)的數(shù)值,無需使用耗時(shí)較大的處理得到第二浮點(diǎn)數(shù),從而,可以提高隨機(jī)數(shù)的生成效率。
可選的,區(qū)間調(diào)整偏移量可以是第一預(yù)設(shè)位數(shù)的小于1的最大浮點(diǎn)數(shù),例如,對(duì)于第一預(yù)設(shè)位數(shù)為64的情況,區(qū)間調(diào)整偏移量可以是0x3fefffffffffffff。
在步驟104中,將第一浮點(diǎn)數(shù)與第二浮點(diǎn)數(shù)相加,得到位于第二預(yù)設(shè)區(qū)間內(nèi)的第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù),作為隨機(jī)數(shù)生成結(jié)果,其中,第二預(yù)設(shè)區(qū)間為[0,1)。
在實(shí)施中,得到第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)后,可以將第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)相加,得到隨機(jī)數(shù)生成結(jié)果,即得到位于[0,1)內(nèi)的第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù)。由于整型和浮點(diǎn)型數(shù)值的二進(jìn)制表示方式相同,因此在進(jìn)行計(jì)算時(shí),可以使終端認(rèn)為第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)就是浮點(diǎn)數(shù),例如,可以通過如下方式計(jì)算隨機(jī)生成結(jié)果(可以用用d表示),第一浮點(diǎn)數(shù)用v表示,第二浮點(diǎn)數(shù)用w表示,d=*reinterpret_cast<double*>(&v)+*reinterpret_cast<double*>(&w)。
也就是說,當(dāng)?shù)谝徽麛?shù)的最高位是0時(shí),即第一浮點(diǎn)數(shù)位于[0,0.5)內(nèi)時(shí),得到的第一浮點(diǎn)數(shù)即是最終的隨機(jī)數(shù)生成結(jié)果,當(dāng)?shù)谝徽麛?shù)的最高位是1時(shí),即第一浮點(diǎn)數(shù)位于(-1,-0.5]內(nèi)時(shí),第一浮點(diǎn)數(shù)與第二浮點(diǎn)數(shù)的和是最終的隨機(jī)數(shù)生成結(jié)果。換言之,當(dāng)轉(zhuǎn)化得到的第一浮點(diǎn)數(shù)位于(-1,-0.5]時(shí),不符合本方案生成[0,1)內(nèi)的浮點(diǎn)數(shù)的要求,因此,可以將位于(-1,-0.5]內(nèi)的第一浮點(diǎn)數(shù)變換到[0,0.5)內(nèi)的浮點(diǎn)數(shù)。在變換時(shí),如果區(qū)間調(diào)整偏移量為小于1的最大浮點(diǎn)數(shù),那么就可以將位于(-1,-0.5]內(nèi)的任意浮點(diǎn)數(shù)變換到0到0.5(包含0且不包含0.5)之間的任意浮點(diǎn)數(shù),進(jìn)而,可以保證采用本方案,能夠均勻的生成[0,1)內(nèi)的隨機(jī)數(shù)。另外,經(jīng)過大量實(shí)驗(yàn)表明,本方案相比現(xiàn)有的生成方案,生成效率提升了50.7%。
本公開實(shí)施例中,通過對(duì)隨機(jī)生成的第一整數(shù)進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),進(jìn)而,可以通過bzhi指令計(jì)算第二浮點(diǎn)數(shù),最后,將第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)相加,得到隨機(jī)數(shù)生成結(jié)果。往往邏輯運(yùn)算、bzhi指令和加法指令三者的耗時(shí)較少,其使用的總時(shí)間會(huì)小于cvtsi2sd指令和乘法運(yùn)算的耗時(shí),從而,可以提高隨機(jī)數(shù)的生成效率。
本公開又一示例性實(shí)施例提供了一種生成隨機(jī)數(shù)的裝置,如圖3所示,該裝置包括:
生成模塊310,用于隨機(jī)生成第一預(yù)設(shè)位數(shù)的第一整數(shù);
轉(zhuǎn)化模塊320,用于通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)區(qū)間為[0.5,1)或(-1,-0.5];
確定模塊330,用于根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量;
相加模塊340,用于將所述第一浮點(diǎn)數(shù)與所述第二浮點(diǎn)數(shù)相加,得到位于第二預(yù)設(shè)區(qū)間內(nèi)的所述第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù),作為隨機(jī)數(shù)生成結(jié)果,其中,所述第二預(yù)設(shè)區(qū)間為[0,1)。
可選的,所述轉(zhuǎn)化模塊,用于:
通過將所述第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù);
通過將所述第二整數(shù)與第二預(yù)設(shè)數(shù)值進(jìn)行或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為1、剩余位數(shù)的數(shù)值為零,所述第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位的數(shù)值。
可選的,所述當(dāng)所述第一預(yù)設(shè)位數(shù)為64時(shí),所述第二預(yù)設(shè)位數(shù)為52,當(dāng)所述第一預(yù)設(shè)位數(shù)為32,所述第二預(yù)設(shè)位數(shù)為23。
可選的,所述確定模塊,用于:
如果所述第一整數(shù)的最高位的數(shù)值為零,則根據(jù)賦值bzhi指令,得到第二浮點(diǎn)為零;
如果所述第一整數(shù)的最高位的數(shù)值為1,則根據(jù)所述bzhi指令,得到第二浮點(diǎn)為區(qū)間調(diào)整偏移量。
可選的,所述區(qū)間調(diào)整偏移量為小于1的最大浮點(diǎn)數(shù)。
關(guān)于上述實(shí)施例中的裝置,其中各個(gè)模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實(shí)施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。
本公開實(shí)施例中,通過對(duì)隨機(jī)生成的第一整數(shù)進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),進(jìn)而,可以通過bzhi指令計(jì)算第二浮點(diǎn)數(shù),最后,將第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)相加,得到隨機(jī)數(shù)生成結(jié)果。往往邏輯運(yùn)算、bzhi指令和加法指令三者的耗時(shí)較少,其使用的總時(shí)間會(huì)小于cvtsi2sd指令和乘法運(yùn)算的耗時(shí),從而,可以提高隨機(jī)數(shù)的生成效率。
需要說明的是:上述實(shí)施例提供的生成隨機(jī)數(shù)的裝置在生成隨機(jī)數(shù)時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將終端或服務(wù)器的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的生成隨機(jī)數(shù)的裝置與生成隨機(jī)數(shù)的方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。
本公開實(shí)施例還示出的一種終端的結(jié)構(gòu)示意圖。該終端可以是個(gè)人電腦等。
參照?qǐng)D4,終端400可以包括以下一個(gè)或多個(gè)組件:處理組件402,存儲(chǔ)器404,電源組件406,多媒體組件408,音頻組件410,輸入/輸出(i/o)的接口412,傳感器組件414,以及通信組件416。
處理組件402通??刂平K端400的整體操作,諸如與顯示,電話呼叫,數(shù)據(jù)通信,相機(jī)操作和記錄操作相關(guān)聯(lián)的操作。處理元件402可以包括一個(gè)或多個(gè)處理器420來執(zhí)行指令,以完成上述的方法的全部或部分步驟。此外,處理組件402可以包括一個(gè)或多個(gè)模塊,便于處理組件402和其他組件之間的交互。例如,處理部件402可以包括多媒體模塊,以方便多媒體組件408和處理組件402之間的交互。
存儲(chǔ)器404被配置為存儲(chǔ)各種類型的數(shù)據(jù)以支持在終端400的操作。這些數(shù)據(jù)的示例包括用于在終端400上操作的任何應(yīng)用程序或方法的指令,聯(lián)系人數(shù)據(jù),電話簿數(shù)據(jù),消息,圖片,視頻等。存儲(chǔ)器404可以由任何類型的易失性或非易失性存儲(chǔ)設(shè)備或者它們的組合實(shí)現(xiàn),如靜態(tài)隨機(jī)存取存儲(chǔ)器(sram),電可擦除可編程只讀存儲(chǔ)器(eeprom),可擦除可編程只讀存儲(chǔ)器(eprom),可編程只讀存儲(chǔ)器(prom),只讀存儲(chǔ)器(rom),磁存儲(chǔ)器,快閃存儲(chǔ)器,磁盤或光盤。
電力組件406為終端400的各種組件提供電力。電力組件406可以包括電源管理系統(tǒng),一個(gè)或多個(gè)電源,及其他與為音頻輸出設(shè)備400生成、管理和分配電力相關(guān)聯(lián)的組件。
多媒體組件408包括在所述終端400和用戶之間的提供一個(gè)輸出接口的屏幕。在一些實(shí)施例中,屏幕可以包括液晶顯示器(lcd)和觸摸面板(tp)。如果屏幕包括觸摸面板,屏幕可以被實(shí)現(xiàn)為觸摸屏,以接收來自用戶的輸入信號(hào)。觸摸面板包括一個(gè)或多個(gè)觸摸傳感器以感測(cè)觸摸、滑動(dòng)和觸摸面板上的手勢(shì)。所述觸摸傳感器可以不僅感測(cè)觸摸或滑動(dòng)動(dòng)作的邊界,而且還檢測(cè)與所述觸摸或滑動(dòng)操作相關(guān)的持續(xù)時(shí)間和壓力。在一些實(shí)施例中,多媒體組件408包括一個(gè)前置攝像頭和/或后置攝像頭。當(dāng)終端400處于操作模式,如拍攝模式或視頻模式時(shí),前置攝像頭和/或后置攝像頭可以接收外部的多媒體數(shù)據(jù)。每個(gè)前置攝像頭和后置攝像頭可以是一個(gè)固定的光學(xué)透鏡系統(tǒng)或具有焦距和光學(xué)變焦能力。
音頻組件410被配置為輸出和/或輸入音頻信號(hào)。例如,音頻組件410包括一個(gè)麥克風(fēng)(mic),當(dāng)音頻輸出設(shè)備400處于操作模式,如呼叫模式、記錄模式和語音識(shí)別模式時(shí),麥克風(fēng)被配置為接收外部音頻信號(hào)。所接收的音頻信號(hào)可以被進(jìn)一步存儲(chǔ)在存儲(chǔ)器404或經(jīng)由通信組件416發(fā)送。
i/o接口412為處理組件402和外圍接口模塊之間提供接口,上述外圍接口模塊可以是鍵盤,點(diǎn)擊輪,按鈕等。這些按鈕可包括但不限于:主頁按鈕、音量按鈕、啟動(dòng)按鈕和鎖定按鈕。
傳感器組件414包括一個(gè)或多個(gè)傳感器,用于為終端400提供各個(gè)方面的狀態(tài)評(píng)估。例如,傳感器組件414可以檢測(cè)到終端400的打開/關(guān)閉狀態(tài),組件的相對(duì)定位,例如所述組件為終端400的顯示器和小鍵盤,傳感器組件414還可以檢測(cè)終端400或終端400一個(gè)組件的位置改變,用戶與終端400接觸的存在或不存在,終端400方位或加速/減速和終端400的溫度變化。傳感器組件414可以包括接近傳感器,被配置用來在沒有任何的物理接觸時(shí)檢測(cè)附近物體的存在。傳感器組件414還可以包括光傳感器,如cmos或ccd圖像傳感器,用于在成像應(yīng)用中使用。在一些實(shí)施例中,該傳感器組件414還可以包括加速度傳感器,陀螺儀傳感器,磁傳感器,壓力傳感器或溫度傳感器。
通信組件416被配置為便于終端400和其他設(shè)備之間有線或無線方式的通信。終端400可以接入基于通信標(biāo)準(zhǔn)的無線網(wǎng)絡(luò),如wifi,2g或3g,或它們的組合。在一個(gè)示例性實(shí)施例中,通信部件416經(jīng)由廣播信道接收來自外部廣播管理系統(tǒng)的廣播信號(hào)或廣播相關(guān)信息。在一個(gè)示例性實(shí)施例中,所述通信部件416還包括近場(chǎng)通信(nfc)模塊,以促進(jìn)短程通信。例如,在nfc模塊可基于射頻識(shí)別(rfid)技術(shù),紅外數(shù)據(jù)協(xié)會(huì)(irda)技術(shù),超寬帶(uwb)技術(shù),藍(lán)牙(bt)技術(shù)和其他技術(shù)來實(shí)現(xiàn)。
在示例性實(shí)施例中,終端400可以被一個(gè)或多個(gè)應(yīng)用專用集成電路(asic)、數(shù)字信號(hào)處理器(dsp)、數(shù)字信號(hào)處理設(shè)備(dspd)、可編程邏輯器件(pld)、現(xiàn)場(chǎng)可編程門陣列(fpga)、控制器、微控制器、微處理器或其他電子元件實(shí)現(xiàn),用于執(zhí)行上述方法。
在示例性實(shí)施例中,還提供了一種包括指令的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器404,上述指令可由終端400的處理器420執(zhí)行以完成上述方法。例如,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是rom、隨機(jī)存取存儲(chǔ)器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲(chǔ)設(shè)備等。
一種非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)所述存儲(chǔ)介質(zhì)中的指令由終端的處理器執(zhí)行時(shí),使得終端能夠執(zhí)行生成隨機(jī)數(shù)的方法,該方法包括:
隨機(jī)生成第一預(yù)設(shè)位數(shù)的第一整數(shù);
通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)區(qū)間為[0.5,1)或(-1,-0.5];
根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量;
將所述第一浮點(diǎn)數(shù)與所述第二浮點(diǎn)數(shù)相加,得到位于第二預(yù)設(shè)區(qū)間內(nèi)的所述第一預(yù)設(shè)位數(shù)的浮點(diǎn)數(shù),作為隨機(jī)數(shù)生成結(jié)果,其中,所述第二預(yù)設(shè)區(qū)間為[0,1)。
可選的,所述通過將所述第一整數(shù)與預(yù)設(shè)數(shù)值進(jìn)行邏輯運(yùn)算,將所述第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),包括:
通過將所述第一整數(shù)與第一預(yù)設(shè)數(shù)值進(jìn)行與運(yùn)算,得到第二整數(shù);
通過將所述第二整數(shù)與第二預(yù)設(shè)數(shù)值進(jìn)行或運(yùn)算,得到第一浮點(diǎn)數(shù),其中,所述第一預(yù)設(shè)數(shù)值的最高位和從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為1、剩余位數(shù)的數(shù)值為零,所述第二預(yù)設(shè)數(shù)值的從最低位開始的第二預(yù)設(shè)位數(shù)的數(shù)值為零、剩余位數(shù)的數(shù)值為[0.5,1)對(duì)應(yīng)的浮點(diǎn)數(shù)的最高位和指數(shù)位的數(shù)值。
可選的,所述當(dāng)所述第一預(yù)設(shè)位數(shù)為64時(shí),所述第二預(yù)設(shè)位數(shù)為52,當(dāng)所述第一預(yù)設(shè)位數(shù)為32,所述第二預(yù)設(shè)位數(shù)為23。
可選的,所述根據(jù)賦值bzhi指令和所述第一整數(shù)的最高位的數(shù)值,得到第二浮點(diǎn)數(shù),其中,所述第二浮點(diǎn)數(shù)為零或者區(qū)間調(diào)整偏移量,包括:
如果所述第一整數(shù)的最高位的數(shù)值為零,則根據(jù)賦值bzhi指令,得到第二浮點(diǎn)為零;
如果所述第一整數(shù)的最高位的數(shù)值為1,則根據(jù)所述bzhi指令,得到第二浮點(diǎn)為區(qū)間調(diào)整偏移量。
可選的,所述區(qū)間調(diào)整偏移量為小于1的最大浮點(diǎn)數(shù)。
本公開實(shí)施例中,通過對(duì)隨機(jī)生成的第一整數(shù)進(jìn)行邏輯運(yùn)算,將第一整數(shù)轉(zhuǎn)化為位于第一預(yù)設(shè)區(qū)間內(nèi)的第一浮點(diǎn)數(shù),進(jìn)而,可以通過bzhi指令計(jì)算第二浮點(diǎn)數(shù),最后,將第一浮點(diǎn)數(shù)和第二浮點(diǎn)數(shù)相加,得到隨機(jī)數(shù)生成結(jié)果。往往邏輯運(yùn)算、bzhi指令和加法指令三者的耗時(shí)較少,其使用的總時(shí)間會(huì)小于cvtsi2sd指令和乘法運(yùn)算的耗時(shí),從而,可以提高隨機(jī)數(shù)的生成效率。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的公開后,將容易想到本公開的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本公開的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本公開的一般性原理并包括本公開未公開的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本公開的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本公開并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本公開的范圍僅由所附的權(quán)利要求來限制。