2010-09-01 104 views
9

我成功地遵守這個代碼:浮點異常

#include <stdio.h> 
#include <math.h> 
int q; 

int main() 
{ 
    srand(time(NULL)); 
    int n=3; 
    q=ceil(sqrt(n)); 
    printf("%d\n %d\n", n,q); 

    if(n == 2) 
     printf("%d\n is prime", n); 
    else if(n % 2 == 0.0 || n < 2) 
     printf("%d\n is not prime", n); 
    else 
    { 
     int x; 
     for(x = 0; x < q; x++){ 
      if(n % x == 0) 
      { 
       printf("%d\n is not prime", n); 
       return; 
      } 
      else 
       printf("%d\n is prime", n); 
     } 
    } 
} 

但是當我運行我的代碼,我得到以下錯誤:

Floating point exception

這個錯誤是什麼意思,我該如何解決?

+0

您需要縮進所有代碼,以避免格式錯亂。 – hb2pencil 2010-09-01 06:22:34

+0

http://stackoverflow.com/questions/4122172/c-programming-floating-point-exception – TGar 2017-01-20 12:29:44

回答

24

這是由n % x引起的,當x爲0.您應該將x從2開始。你根本不應該使用浮點,因爲你只需要整數運算。

一般注意事項:

  1. 嘗試格式化你的代碼更好。專注於使用一致的風格。例如。你有一個在if支撐之後立即開始的其他元素(甚至沒有空格),另一個元素之間有一個換行符。
  2. 除非必要,否則不要使用全局變量。沒有理由讓q成爲全球性的。
  3. 在非void(int)函數中不返回值。
+6

此外:您將得到一個*浮點異常*,因爲您的計算機沒有*整數除0 *的特殊情況。一個更好的描述將是*算術例外*,但這個用詞不當有很長的歷史,可能不能再改變。 – 2010-10-16 13:32:07

0

這是由n % x造成的,其中x = 0在第一次循環迭代中。你無法計算對於模數爲0。