我正在尝试计算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;
}

最佳答案

好吧,很难理解您的代码在做什么。但是还是

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

关于c - 为什么我得到 'Floating point exception: 8',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31808661/

10-10 06:12