Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Floating point exception

Tags:

c++

#include <cstdio>
#include <ctime>

int populate_primes(int array[])
{   
    const int max = 1000000; 
    char numbers[max+1];
    int count=1;
    array[0]=2;
    for(int i=max;i>0;i-=2)numbers[i]=0;
    for(int i=max-1;i>0;i-=2)numbers[i]=1;
    int i;  
    for(i=3;i*i<=max;i+=2){
        if(numbers[i]){
            for(int j=i*i;j<max+1;j+=i)numbers[j]=0;            array[count++]=i;
        }
    }
    int limit = max/2;
    for(;i<limit;i++)   if(numbers[i])array[count++]=i;
    return count;
}

int factorize(int number,int array[])
{
    int i=0,factor=1;
    while(number>0){
        if(number%array[i]==0){
            factor++;
            while(number%array[i]==0)number/=array[i];
        }
        i++;
    }
    printf("%d\n",factor);
    return factor;
}
int main()
{
    int primes[42000];
    const int max = 1000000;
    int factors[max+1];
    clock_t start = clock();
    int size = populate_primes(primes);
    factorize(1000,primes);
    printf("Execution time:\t%lf\n",(double)(clock()-start)/CLOCKS_PER_SEC);
    return 0;
}

I am trying to find the no. of factors using simple algo. The populate primes part is running okay , but the factorize part does not execute and gives the floating point exception error.

Please see the code and tell my mistake.

like image 282
Anirudh Kumar Avatar asked Jun 08 '26 09:06

Anirudh Kumar


1 Answers

In your factorize method you access array[0], because the initial value of i is 0. This array is the primes array which is populated by populate_primes. But populates prime doesn't write to primes[0], since the initial value of count is 1.

Thus the first element is not initialized and you probably get a div by 0 error.

like image 183
Petar Ivanov Avatar answered Jun 10 '26 18:06

Petar Ivanov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!