栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++二分有关溢出的问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++二分有关溢出的问题

当我们使用二分

中间值m = (l+r)/2的时候,当l+r比较大的时候,往往会溢出;

伺机了解到一种方法 即一条避免溢出的恒等式

m= [(l+r)/2] = [(r-l)/2]+l ,

这里非常感谢鱼佬的教导(数竞选手果然非同凡响)

如果是简单的说明,不妨设(r-l)/2=x>=0 (是带有小数的实数)

那么l = n;

那么m= [(l+r)/2] = [(r-l)/2]+l 等效于 m =[n+x] = n+[x],其中n是正整数

很显然,如果一个正整数加上一个带有小数的实数再取整,等效于n直接加上x的取整

比如[7+3.84]=[10.84]=10 = 7+[3.84] =7+3 =10;

如果要从严格的数学推理证明,请看下面(再次感谢佬耐心指点)

欲证[n+x] = n+[x],n∈Z且n>=0,x>=0;

不妨令①x = [x]+{x},说明:[x]代表向下取整的整数部分,{x}代表去掉整数部分的小数部分

对①式,把x用n+x代入,即n+x = [n+x]+{n+x}

即[n+x] = n+x-{n+x}

又因为欲证[n+x] = n+[x]

即证x-{n-x} = [x] ,由于n是整数,x是带有小数的正数,那么{n+x}即取n+x的小数部分,很显然,就是x的小数部分即{x},那么即{n-x} = {x}

即证x - {x} = [x],显然,证毕。

学习数学要多做习题,边做边思索。先知其然,然后知其所以然。——苏步青

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号