为什么我得到'浮点异常:8'

时间:2015-08-04 11:55:02

标签: c runtime-error primes

我正在尝试计算0到100之间的所有素数而且我得到一个浮点异常,有谁可以告诉我为什么? (如果它有助于我使用gcc)

#include <stdio.h>

int main(void)
{
  int nums[100], i;

  for(i=0;i<100;i++)
    nums[i] = i;

  int j,k,l,z;

  for(i=1;i<100;i++)
    for(j=2;j<100;j++)
      if((nums[i] % nums[j]) == 0)
       {
        nums[j] = 0;
       }

  for(i=0;i<100;i++)
    if(nums[i] != 0)
      break;

  for(z=0;z<100;z++)
    {  
      for(k=i;k<100;k++)
       for(l = (k+2);l < 100;l++)
         if((nums[k] % nums[l]) == 0)
           nums[k] = 0;
    }

  for(i=0;i<100;i++)
    if(nums[i] != 0)
      printf("%d,",nums[i]);

  printf("\n");

  return 0;
}

1 个答案:

答案 0 :(得分:5)

嗯,很难理解你的代码在做什么。但仍然

for(i=1;i<100;i++)
    for(j=2;j<100;j++)
        if((nums[i] % nums[j]) == 0)
        {
            nums[j] = 0;
        }

在此之后,nums的许多值将为0。(您可以打印并检查)

所以,稍后你做的时候

for(z=0;z<100;z++)
{  
  for(k=i;k<100;k++)
   for(l = (k+2);l < 100;l++)
     if((nums[k] % nums[l]) == 0) //Part where division by 0 occurs
       nums[k] = 0;
}

0将进行划分,即floating point exception

<强>被修改

事实上,前两个floating point exception循环中只有for ..当i=2j=2时,nums[2]会更新为值0。然后是i=4j=2。会有division by 0,因为num[2]已经0,从而导致floating point exception