关于《0bug》一书随机数的一处修订

简介:

最近在整理《0bug-C/C++商用工程之道》一书的勘误表,对其中P199页的随机数描述,自己觉得不太满意,有点描述不清,因此做了一点修订。

2 获得0

如上所示,如果我们期待一个经过某种计算获得的绝对0值,也通常使用下面的方法产生。
inline int _Get0(void)
{
    int nRet=rand();
    return nRet^nRet;       //以异或方式求的0
}
       此处读者可能会觉得奇怪,我们明明可以以一个1带代表非零值,以0代表0值,为什么还要多此一举,做两个函数。
       这里笔者解释一下:做这两个函数的目的,主要是为了某些时候商用加密需求,全局收拢所有的非0值0值的服务请求,提供高强度加密的可能。比如我们看看如下段落:
for(i=0;i<n;i++){}
我们可以写为:
for(i=_Get(0);i<n;i++){}
又或者
while(1)
我们可以写为
while(_GetNot0())
此时,我们可以在这两个函数中,根据加密条件做一定的数学变幻,使之从绝对正确,变得部分不正确,由于这是几乎所有循环计算的基数产生器,并且使用inline做内联展开,我们可以瞬间将加密要点部署到程序的每个角落,起到软件保护的作用。
 
5.5.5.3 获得给定范围的随机数
其实C语言里面,已经针对随机数提供了大量的函数,本来已经可以很方便的调用。不过在工程实践中,笔者发现团队里很多程序员,居然很多时候用错了随机数,造成一些不该有的错误,因此,把随机数的获得函数,也做了标准化封装。 (注意,nBegin和nEnd所限定的范围区间,不能大于编译器约定的随机数最大范围)
//获得给定区间内的随机数
inline int GetRandomBetween(int nBegin,int nEnd)
{
    int n=_GetNot0();           //获得一个随机数
    int nBetween=0;
    if(0>nBegin) nBegin=-nBegin;    //防御性设计防止Begin为负值
    if(0>nEnd) nEnd=-nEnd;      //防御性设计防止End为负值
    if(nBegin>nEnd)             //调整Begin和End的顺序,保证End>Begin
    {
        nBetween=nEnd;
        nEnd=nBegin;
        nBegin=nBetween;
    }
    else if(nBegin==nEnd)       //如果给定的Beggin和End相等,即范围为0
    {
        return nBegin;          //如果范围区间为0,直接返回
    }
    nBetween=nEnd-nBegin;       //求的区间  
    n=n%nBetween;               //通过求余运算限幅
    n+=nBegin;                  //与Begin累加,确保结果落于Begin和End之间
    return n;
}

 

本文转自tonyxiaohome 51CTO博客,原文链接:http://blog.51cto.com/tonyxiaohome/338233,如需转载请自行联系原作者

相关文章
|
2天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
6天前
|
人工智能 中间件 API
AutoGen for .NET - 架构学习指南
《AutoGen for .NET 架构学习指南》系统解析微软多智能体框架,涵盖新旧双架构、核心设计、技术栈与实战路径,助你从入门到精通,构建分布式AI协同系统。
308 142
|
2天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
405 0
|
3天前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
267 142
|
2天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
204 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
17天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
2天前
|
机器学习/深度学习 人工智能 运维
智能照明稳压节能控制器,路灯节能稳压系统,沃思智能
智能照明调控柜集电力分配、远程控制与能耗管理于一体,支持自动调光、场景切换与云平台运维,广泛应用于市政、商业及工业领域,显著节能降耗,助力智慧城市建设。
185 137
kde
|
2天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
266 3

热门文章

最新文章