我正在尝试计算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=2
和j=2
时,nums[2]
将更新为值0
。然后是i=4
和j=2
。将存在一个division by 0
,因为num[2]
已经是0
,从而导致floating point exception
关于c - 为什么我得到 'Floating point exception: 8',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31808661/