减法失效?

double竟然比long long厉害。。不过还是遇到BUG了

下面的代码

#include<iostream>
#include<cmath>
 
using namespace std;
typedef long long LL;
double quickpow(LL b)
{
	double a=2;
	double ans=1;
	while(b)
	{
		if(b&1)
			ans*=a;
		printf("%.0lf\n",ans);
		a*=a;
		b>>=1;
		printf("%.0lf\n",a);
	}
	return ans-1;
}
int main()
{
    LL n;
    cin>>n;
    printf("%.0lf",(quickpow(n)));
    return 0;
}

在n小于某个值的时候求的是2^n-1;
但当输入64的时候,减一似乎失效了?

问了几个群里的大佬,查的知乎,似乎是精度失效了

posted @ 2021-12-28 19:16  qbning  阅读(34)  评论(0编辑  收藏  举报
描述