【问题标题】:Why am I getting 'Floating point exception: 8'为什么我会收到“浮点异常:8”
【发布时间】:2015-10-26 19:42:59
【问题描述】:

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

【问题讨论】:

标签: c runtime-error primes


【解决方案1】:

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

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

已编辑

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

【讨论】:

  • 非常感谢!这很有帮助,我会重新审视它。
  • 它将在i=4j=2 的第一个代码sn-p 中崩溃,因为当i=2j=2nums[2] 将设置为0。所以第二个代码 sn -p 将无法到达。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2013-02-10
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多