【问题标题】:Floating point exception浮点异常
【发布时间】:2012-12-18 14:25:22
【问题描述】:
#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;
}

我正在努力寻找答案。使用简单算法的因素。 populate primes 部分运行正常,但 factorize 部分没有执行并给出浮点异常错误。

请查看代码并告诉我的错误。

【问题讨论】:

  • 检查数组是否越界?和数组[i] != 0
  • 可能由number%array[i]==0引起,当array[i]0

标签: c++


【解决方案1】:

在您的因式分解方法中,您访问数组 [0],因为 i 的初始值为 0。 该数组是由 populate_primes 填充的素数数组。但是填充 prime 不会写入 primes[0],因为 count 的初始值为 1。

因此第一个元素未初始化,您可能会收到 div by 0 错误。

【讨论】:

  • 我已经初始化了array[0]=2;分开,因此这不应该是问题。
【解决方案2】:

您需要将您从填充获得的大小传递给分解。 因式分解(整数,整数数组 [],整数大小);
问题是你的 array[] 没有完全加载,它只加载到大小变量。所以你可能想检查一下。
factorize 内部的逻辑也是错误的。您需要检查 (number > 1) 而不是 (number >0)。

【讨论】:

  • number>1 是这里的问题。
【解决方案3】:

试试下面的函数看看有没有问题:

#define MAX_PRIMES 42000
int factorize(int number,int array[])
{
  int i=0,factor=1;
  for (i=0; number>0 && i< MAX_PRIMES; i++){
    if (array[i] == 0 || array[i] == 1) {
      printf("Error: array[%d] = %d\n", i, array[i]);
    } else {
      if(number%array[i]==0){
        factor++;
        while(number%array[i]==0 && number>0) {
          printf("%d %d\n", number, array[i]);
          number/=array[i];
        }
      }   
    }   
  }
  printf("%d\n",factor);
  return factor;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多