当我们使用二分
中间值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],显然,证毕。
学习数学要多做习题,边做边思索。先知其然,然后知其所以然。——苏步青