为什么我得到’浮点exception:8′
我正在尝试计算0到100之间的所有素数,并且我得到一个浮点exception,有人可以告诉我为什么吗? (如果它有助于我使用gcc)
#include 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
编辑
事实上,前两个for
循环中只会出现floating point exception
。当i=2
且j=2
, nums[2]
将更新为值0
。 然后,当i=4
且j=2
。 将division by 0
,因为num[2]
已经为0
,从而导致floating point exception