Я пытаюсь вычислить все простые числа от 0 до 100, и я получаю исключение с плавающей точкой, может ли кто-нибудь сказать мне, почему? (Если это помогает, я использую 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
будут 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
отредактированный
Infact, будет floating point exception
с floating point exception
в первых двух циклах. Когда i=2
и j=2
, nums[2]
будет обновляться до значения 0
. Затем позже, когда для i=4
и j=2
. Будет division by 0
, потому что num[2]
уже равно 0
, что вызывает floating point exception
с floating point exception