浮点异常,没有浮点数或双变量

时间:2018-03-15 14:36:19

标签: c coredump floating-point-exceptions

我遇到的问题是以下代码"浮点异常,核心转储"但我甚至没有一个浮点数或双变量。通过使用检查printf,我发现它发生在isPrimeFunction中,执行阻塞。

/*
PROBLEM 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/


#include <stdio.h>

typedef int bool;
const bool true=1;
const bool false=0;

bool isPrime(long long int number) {
    long long int i;
    for(i=2; i < (number/2); i++) {
        if(number%i == 0) {
            return false;
        }
    }
    return true;
}   

int main() {
    long long int number, largest;
    number=600851475143;
    largest=0;
    int i;

    for(i=1; i <= (number/2); i++) {
        if((number % i) == 0) {
            if(isPrime(i) == true) {
                largest=i;
            }
        }
    }
    if(largest != 0)    
        printf("Largest prime factor is: %lli\n", largest);
    else
        printf("There is no prime factor of the number.\n");    

    return 0;
}

1 个答案:

答案 0 :(得分:6)

main中,i是一个整数,因此很可能不足以容纳number/2,这意味着它很可能(尽管这是未定义的行为) i将换行并最终为0. number % i然后会导致除零,这是另一个未定义的行为,但很可能是为什么你的系统会产生浮点异常(我的)。

N.B。这不是一个非常好的算法。只计算你循环的次数。有了6000亿这样的数字,即使它是素数而且你永远不会在循环内触发isPrime测试,你会看到接近一小时的运行时间。每次你在循环中进行测试时,你都会大量增加你的运行时间。