广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 1307 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.016509 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言