和
是否相等?
对于整数而言,两者是相等的;对于浮点数而言,两者不一定相等。
测试代码:
#include <stdio.h>
#include <math.h>
int main()
{
long int maxnum = 100000;
//整数测试
for(int n = 1; n<maxnum; n++)
{
int down = floor(log(n)/log(2)) + 1;
int up = ceil(log(n+1)/log(2));
if(down != up)
printf("down = %d,up = %d,n = %f\n",down,up,n);
}
printf("1到%lu之间的所有整数都满足两式相等\n",maxnum);
//浮点数测试
for(double n = 1; n<maxnum; n+=0.11)
{
int down = floor(log(n)/log(2)) + 1;
int up = ceil(log(n+1)/log(2));
if(down != up)
printf("down = %d,up = %d,n = %f\n",down,up,n);
}
double d = 3.0;
int b = floor(log(3.0)/log(2.0)) + 1;
int e = ceil(log(3.0+1)/log(2.0));
printf("\nb = %d,e = %d",b,e);
double p = log(3.000001+1);
double q = log(2);
int out = ceil(p/q);
printf("\np = %f,q = %f,out = %d",p,q,out);
return 0;
}
为了方便截图,将测试的最大数值仅设为了30,读者可以根据需要自行设置更大的数值来测试,得到的结果应该一样
附: