| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1833 人关注过本帖
标题:C语言随机数优化
只看楼主 加入收藏
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
结帖率:100%
收藏
 问题点数:0 回复次数:9 
C语言随机数优化
C语言随机数优化, 官方默认支持随机数最大概率32767, 封装后新的随机数支持几百兆的整数甚至尾数大于16位的浮点数, 每一个数都有机会出现, 解决了官方随机数最大概率不合理, 容易出现重复数甚至不出数的问题


程序代码:


捌無 视程显露 制造低高肆(捌無 低肆, 捌無 高肆) {
    返回(低肆 | 高肆 << 32);
}


肆整 视程显露 得到随机肆整(肆整 最小, 肆整 最大) {
    若(最小 == 最大) 返回 最大;
    肆無 贰 = rand() + rand() + 1;
    肆整 小 = 得到最小(最小, 最大);
    返回(肆整)(制造低高贰(贰, 贰) % (得到最大(最小, 最大) - 小) + 小);
}


捌整 视程显露 得到随机捌整(捌整 最小, 捌整 最大) {
    若(最小 == 最大) 返回 最大;
    肆無 贰 = rand() + rand() + 1, 肆 = 制造低高贰(贰, 贰);
    捌整 小 = 得到最小(最小, 最大);
    返回(捌整)(制造低高肆(肆, 肆) % (得到最大(最小, 最大) - 小) + 小);
}


捌浮 视程显露 得到随机捌浮(捌浮 最小, 捌浮 最大) {
    若(最小 == 最大) 返回 最大;
    肆無 贰 = rand() + rand() + 1, 肆 = 制造低高贰(贰, 贰);
    捌浮 小 = 得到最小(最小, 最大);
    返回(捌浮)(制造低高肆(肆, 肆) % 最大捌浮) / 最大捌浮 * (得到最大(最小, 最大) - 小) + 小;
}


空白 视程显露 设置随机种子(捌浮 秒) {
    肆無 流逝 = (肆無)得到余数(秒 * 1000, 最大肆無);
    srand((肆無)得到随机肆整(~最大肆整, 最大肆整) %
        得到最大(最大肆無 - 流逝, 流逝) + 得到最小(最大肆無 - 流逝, 流逝));
}


搜索更多相关主题的帖子: rand 随机数 最大 返回 最小 
2021-05-04 17:38
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
<随机种子优化>
之前由于调用系统计时器作为随机种子, 种子数值的范围波动非常小, 如果在1毫秒内多次调用设置随机种子功能或者第一次打开程序的时候, 发生的随机种子都是一样
现在经过优化, 每次调用设置随机种子功能或者每次打开程序产生的种子都是不一样的, 在0~4294967295范围内随机选取一个数作为种子, 消除了直接使用系统计时器作为种子的趋同性, 现在产生的随机数更加均匀了


程序代码:

肆無 视程显露 设置随机种子(捌浮 秒) {
    srand((肆無)得到余数(得到随机捌浮(~最大捌浮, 最大捌浮) / 最大捌浮 * 秒 * 1000, 最大肆無));
    肆無 种子 = (肆無)得到随机肆整(~最大肆整, 最大肆整);
    srand(种子);
    返回 种子;
}



[此贴子已经被作者于2021-5-5 11:10编辑过]

2021-05-05 11:08
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
牛顿始终认为 速度*时间=距离 是万恒不变的定理
图片附件: 游客没有浏览图片的权限,请 登录注册
2021-05-05 19:50
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2021-05-06 01:56
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

<贝塞尔曲线实现方法>
给定任意3点坐标, 可得到一条完整曲线范围内任意位置坐标
1.可得到两点间的跳跃轨迹,
2.可得到抛物线的抛物轨迹
3.可得到波形运动的轨迹
一条线通吃3种结构体

程序代码:
typedef    结构    结构曲线{
    捌浮            横1;
    捌浮            纵1;
    捌浮            横2;
    捌浮            纵2;
    捌浮            横3;
    捌浮            纵3;
}    结构曲线, * 手柄曲线;


结构曲线 视程显露 制造曲线(捌浮 横1, 捌浮 纵1, 捌浮 横2, 捌浮 纵2, 捌浮 横3, 捌浮 纵3) {
    结构曲线 曲线 = { 横1, 纵1, 横2, 纵2, 横3, 纵3 };
    返回 曲线;
}


// 位置取值范围0~1.0
结构指向 视程显露 得到曲线指向(手柄曲线 曲线, 捌浮 位置) {
    若(!曲线) 返回 制造指向(0, 0);
    捌浮 位1 = (1.0 - 位置) * (1.0 - 位置), 位2 = 2.0 * 位置 * (1.0 - 位置), 位3 = 位置 * 位置;
    结构指向 指向 = { (肆整)(位1 * 曲线->横1 + 位2 * 曲线->横2 + 位3 * 曲线->横3),
        (肆整)(位1 * 曲线->纵1 + 位2 * 曲线->纵2 + 位3 * 曲线->纵3) };
    返回 指向;
}

2021-05-14 11:42
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
<开源>
<C语言贝塞尔曲线长度微积分计算>
经测试, 是100%准确的! 有钱都找不到这种代码.
贝塞尔曲线特点是它并不是匀速运动的, 在1.0的范围内它可以实现自动减速和加速 ,在游戏运动中可以忽略重力属性实现优美的重力运动


曲线范围内取坐标
程序代码:
// 位置取值范围0~1.0
结构坐标 视程显露 得到曲线坐标(手柄曲线 曲线, 捌浮 位置) {
    若(!曲线) 返回 制造坐标(0, 0, 0);
    捌浮 位1 = (1.0 - 位置) * (1.0 - 位置), 位2 = 2.0 * 位置 * (1.0 - 位置), 位3 = 位置 * 位置;
    结构坐标 坐标 = { 位1 * 曲线->横1 + 位2 * 曲线->横2 + 位3 * 曲线->横3,
                            位1 * 曲线->纵1 + 位2 * 曲线->纵2 + 位3 * 曲线->纵3 };
    返回 坐标;
}



曲线范围内取长度
程序代码:

捌浮 得到曲线長度(手柄曲线 曲线, 捌浮 位置) {
    若(!曲线) 返回 0;
    结构坐标 坐1 = { (曲线->横1 + 曲线->横3 - 2.0 * 曲线->横2), (曲线->纵1 + 曲线->纵3 - 2.0 * 曲线->纵2) };
    结构坐标 坐2 = { 2.0 * (曲线->横2 - 曲线->横1), 2.0 * (曲线->纵2 - 曲线->纵1) };
    捌浮 A = 4.0 * (坐1.横 * 坐1.横 + 坐1.纵 * 坐1.纵);
    捌浮 B = 4.0 * (坐1.横 * 坐2.横 + 坐1.纵 * 坐2.纵);
    捌浮 C = 坐2.横 * 坐2.横 + 坐2.纵 * 坐2.纵;
    捌浮 根A = 得到平方根(A), 距A = 8.0 * A * 根A, 距B1 = B, 距B2 = 2.0 * A * 位置 + B;
    捌浮 距C1 = 2.0 * 根A * 得到平方根(C), 距C2 = 2.0 * 根A * 得到平方根(A * 位置 * 位置 + B * 位置 + C);
    返回 绝对捌浮(((距C1 * 距B1 - (B * B - 4.0 * A * C) * log(距C1 + 距B1)) -
        (距C2 * 距B2 - (B * B - 4.0 * A * C) * log(距C2 + 距B2))) / 距A);
}

2021-05-15 16:14
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
最新的源代码下载地址
https://down.bccn.net/10840.html
大量C语言算法, 大量几何形状碰撞检测, 大量天象运动轨迹计算
添加了许多功能, 修复了一些漏洞
试问又几个程序员能像我一样用一行代码就可以判断两条直线是否互相垂直或平行呢?
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

2021-05-21 20:13
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
今天又发现一个惊天秘密, 当CPU使用率高时画面会出现卡顿和撕裂感的, 不能限制渲染引擎的帧数的, 让它全速跑, 现在修改后发现即使高处理器占用的情况下画面也能保持流畅, 帧数控制应该交给物理引擎, 它能确定一个物体的动作, 位置, 从而考虑贴什么图, 而渲染引擎只需全是跑即是
图片附件: 游客没有浏览图片的权限,请 登录注册

2021-05-22 15:41
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
最新下载地址
https://down.bccn.net/10841.html
修改: 删除 偷看消息框架() 功能
现在即使CPU被占用100%, 同时打开几个程序, 游戏画面依然能保持流畅平滑的运动
游戏引擎设计有点反智, 玩游戏的人觉得画面帧数是唯一影响游戏体验的, 实际它只是一个辅助显示的方式, 还有一个因素是游戏物理引擎的时间

[此贴子已经被作者于2021-5-22 16:18编辑过]

2021-05-22 16:12
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

接下来准备要实现的功能, 都是初高中简单的数学知识, 百度应该有答案, 几行代码的事
2021-05-24 16:22
快速回复:C语言随机数优化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089136 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved