Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取错误浮点异常:8_C++ - Fatal编程技术网

C++ 获取错误浮点异常:8

C++ 获取错误浮点异常:8,c++,C++,我不知道为什么g++不喜欢我的代码。它在java中运行良好。如有任何见解,将不胜感激 #include<iostream> using namespace std; bool isPrime(long number); int main(){ const long number = 600851475143; long max = 0; for(long i= 0; i*i <= number; i++) if(number % i == 0 &&

我不知道为什么g++不喜欢我的代码。它在java中运行良好。如有任何见解,将不胜感激

#include<iostream>

using namespace std;

bool isPrime(long number);

int main(){
const long number = 600851475143;
long max = 0;
for(long i= 0; i*i <= number; i++)
    if(number % i == 0 && isPrime(i))
        max = i;
cout<< max << endl;

return 0;
}

bool isPrime(long number){
if(number <= 1) return false;
if(number == 2) return true;
if(number % 2 == 0) return false;

for(long     i= 3; i*i <= number; i+=2)
    if(number % i == 0)
        return false;
return true;
}
#包括
使用名称空间std;
bool-isPrime(长数);
int main(){
const long number=600851475143;
长最大值=0;

对于(long i=0;i*i,我在任何地方都看不到浮点,但如果我不得不猜测它是由于溢出造成的。请使用
无符号long-long
long-long
而不是常规的
long

sizeof(long)
在某些编译器上的计算结果为4,类似于
sizeof(int)这意味着<代码>长的限制是2147483647。C++代码要求代码>长长< /C> >至少64位,是<>代码>长< /COD>和<代码> INT/COM>,其最大值为922337203685477580。
错误源于您的代码:
你做的是模乘零,这是错误的

考虑这样做:

#include <iostream>

using namespace std;

bool isPrime(unsigned long long number);

int main(){
    const unsigned long long number = 600851475143;
    unsigned long long max = 0;
    for(unsigned long long i= 1; i*i <= number; i++)
        if(number % i == 0 && isPrime(i))
            max = i;
    cout<< max << endl;

    return 0;
}

bool isPrime(unsigned long long number) {
    if(number <= 1) return false;
    if(number == 2) return true;
    if(number % 2 == 0) return false;

    for(unsigned long long i= 3; i*i <= number; i+=2)
        if(number % i == 0)
            return false;
    return true;
}
#包括
使用名称空间std;
bool-isPrime(无符号长-长数字);
int main(){
常量无符号长-长数字=600851475143;
无符号长最大值=0;
for(无符号长i=1;i*i
有溢出,long无法容纳那个大数字

尝试:

编辑:

你不能%对抗0,
i
0

for(long i= 0; i*i <= number; i++)
           ^^
{
    if(number % i == 0 && isPrime(i))
               ^^^
{
   max = i;
   cout<< max << endl;
}

对于(long i=0;i*i对于我来说,在执行产品时检查整数溢出时出现此错误:

#define INT_MIN -2147483648 // -2^31
#define INT_MAX  2147483647 //  2^31-1

int out=-1, x=-5;

if ((out > 0 && (x > INT_MAX/out || x < INT_MIN/out)) ||
    (out < 0 && (x < INT_MAX/out || x > INT_MIN/out))) {
  // what to do for overflow
} else {
  out *= x;
}
#定义整数最小值-2147483648//-2^31
#定义INT_MAX 2147483647//2^31-1
int out=-1,x=-5;
if((out>0&(x>INT_MAX/out | | xINT_MIN/out))){
//溢出怎么办
}否则{
out*=x;
}

问题在于,由于
abs(INT_MIN)>abs(INT_MAX)
,恰好在
out=-1
时,条件
INT_MIN/out
导致
INT
溢出(由于
0
,没有足够的空间容纳
INT_MAX+1
)。我添加了一个新条件来修复浮点问题:
out==-1&&(x>INT_MAX|124; x@JoshHorowitz什么错误?实际上任何地方都没有浮点。啊,你在做一个与零相对的模。为了便于将来使用,请注意,我在做时也遇到了相同的错误(非常罕见)除以0。这实际上就是问题所在,尽管它与%not/。但想法相同。
const unsigned long long number = 600851475143;
unsigned long longmax = 0;
for(long i= 0; i*i <= number; i++)
           ^^
{
    if(number % i == 0 && isPrime(i))
               ^^^
{
   max = i;
   cout<< max << endl;
}
bool isPrime(unsigned long long  number);

int main(){

    const unsigned long long number = 600851475143;
    unsigned long long max = 0;
    for(long i = 1; i*i <= number; i++)
    {
        if(number % i == 0 && isPrime(i))
        {
            max = i;
            cout<< max << endl;
        }
    }
    return 0;
}

bool isPrime(unsigned long long  number)
{
    if(number <= 1) return false;
    if(number == 2) return true;
    if(number % 2 == 0) return false;

    for(unsigned long long i= 3; i*i <= number; i+=2)
    {
        if(number % i == 0)
        {
            return false;
        }
    }
    return true;
}
#define INT_MIN -2147483648 // -2^31
#define INT_MAX  2147483647 //  2^31-1

int out=-1, x=-5;

if ((out > 0 && (x > INT_MAX/out || x < INT_MIN/out)) ||
    (out < 0 && (x < INT_MAX/out || x > INT_MIN/out))) {
  // what to do for overflow
} else {
  out *= x;
}