C++中pow()函数返回值问题
在输出pow()计算结果时,出现越界的情况。
但先用一个long变量接收pow()的结果,则不会出现越界。
下面展示一下我在进行梅森素数练习的时候出现的问题。
if(flag == 0)
{
count++;
m = pow(2,n)-1;
cout << "num:" <<count << ":2^" << n << "-1=" << m << endl;
}
运行结果:
但是如果直接输出pow()结果,则会越界:
if(flag == 0)
{
count++;
cout << "num:" <<count << ":2^" << n << "-1=" << pow(2,n)-1 << endl;
}
运行结果:
下面展示一些 完整代码
。
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
unsigned long int k,t,j,m;
int flag,n,count=0;
t = 2;
for(n = 2;n<32;n++)
{
t = t*2;
k = t-1;
flag = 0;
for(j=3;j<=sqrt(k);j+=2)
{
if(k%j==0)
{
flag=1;
break;
}
}
if(flag == 0)
{
count++;
m = pow(2,n)-1;
cout << "num:" <<count << ":2^" << n << "-1=" << m << endl;
}
}
return 0;
}