廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 1300 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   

頭像
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: *
推文 x 鮮花 x
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[插件] 一些關於 native random() 實用公式  (可令random()抽正負數、小數等等)


獻花 x0 回到頂端 [樓 主] | Posted:2025-05-03 14:25 |
冷場館女僕長 會員卡
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
頭銜:一位興趣使然的伺服主一位興趣使然的伺服主
特約版主
級別: 特約版主 該用戶目前不上站
版區: CS教學區
推文 x201 鮮花 x479
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

更新一下帖文,常常聽說有人說數學只需懂加減乘除即可表情
但我弄完這些總覺得我連加減乘除也搞不太懂( 表情

從之前的小數運算define可以看出,因為需使用除法而令整個define跑得相當慢,
但存不存在改良的方案?答案是有的表情
在程式語言中, / 除法運算是比 * 乘法運算消耗更多資源,
但我們可以透過 * 乘法來做出 / 除法的效果,從而減輕資源消耗表情
簡單舉個例子,4 * 0.5 結果會等於 2,可看到我們使用的是乘法但相等於把數字除以2表情
而我們也可以透過上述‘’取巧‘’的乘法技巧來改善浮點數除法較慢的問題,
首先,所以我們預先自己使用計算機計算 1.0 / RANDMAX(即是0x7FFFFFFF) 的结果:

好了,我們得出其數值為 4.656612875245797e-10
然後把這數值把本來進行除法替代成乘法表情:
新增:
複製程式
//Max inverse size, same as (1.0/0x7FFFFFFF), Used to create Random Float
//32位下最大反轉數值大小, 等同 (1.0/0x7FFFFFFF), 用來產生隨機浮點數
#define INV_MAX 4.656612875245797e-10
然後修改:
複製程式
修改前:
#define randomf(%0) (Float:((float(random(RAND_MAX)) / float(RAND_MAX)) * Float:%0))
#define random_getfloat(%0,%1) (Float:(float(random(RAND_MAX)) / float(RAND_MAX) * (Float:%1 - Float:%0)) + Float:%0)
#define random_slowgetnum(%0,%1) (floatround(((float(random(RAND_MAX)) / float(RAND_MAX) * (%1 - %0 + 1)) + %0), floatround_floor))

修改後:
#define randomf(%0) (Float:((float(random(RAND_MAX)) * INV_MAX) * Float:%0))
#define random_getfloat(%0,%1) (Float:(float(random(RAND_MAX)) * INV_MAX * (Float:%1 - Float:%0)) + Float:%0)
#define random_slowgetnum(%0,%1) (floatround(((float(random(RAND_MAX)) * INV_MAX * (%1 - %0 + 1)) + %0), floatround_floor))
更新後

更新後randomf(20.0) 執行10000次的速度 :
0.000155862280
0.000156527456
0.000156936260
更新後random_getfloat(0.0,20.0) 執行10000次的速度 :
0.0002472922240
0.0001932299120
0.0002426469200
更新後random_slowgetnum(-20,20) 執行10000次的速度 :
0.000420149320
0.000425449232
0.000464830904

可以看到,雖然效能上仍跟原生random_float慢(randomf性能可接近但功能性較弱),
但會比之前直接用除法快表情表情

已把更新後的random.inc放到附件裡表情


本帖包含附件
zip random inc.zip   (2025-09-26 18:42 / 2 KB)   下載次數:1


我只是一個興趣使然的Server主.
獻花 x0 回到頂端 [1 樓] From:未知地址 | Posted:2025-05-26 16:47 |
sot86217
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x6
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

2025居然還有教學文 不支持不行 !


獻花 x1 回到頂端 [2 樓] From:歐洲 | Posted:2025-05-27 11:47 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.012633 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言