2010-09-01 59 views
9

tôi tuân thành công mã này:Floating điểm ngoại lệ

#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); 
     } 
    } 
} 

Nhưng khi tôi chạy mã của tôi, tôi nhận được lỗi sau:

Floating point exception

không lỗi này có nghĩa là gì và làm thế nào tôi có thể sửa chữa nó?

+0

Bạn cần thụt lề tất cả mã của mình để mã không được định dạng quá kỳ lạ. – hb2pencil

+0

http://stackoverflow.com/questions/4122172/c-programming-floating-point-exception – TGar

Trả lời

24

Nó được gây ra bởi n % x, khi x là 0. Bạn nên có x bắt đầu bằng 2 để thay thế. Bạn không nên sử dụng dấu chấm động ở đây, vì bạn chỉ cần các phép toán số nguyên.

ghi chú chung:

  1. Hãy thử để định dạng mã của bạn tốt hơn. Tập trung vào việc sử dụng một phong cách nhất quán. Ví dụ. bạn có một người khác bắt đầu ngay lập tức sau một cú đúp nếu không phải là một khoảng trống, và một cái khác với một dòng mới ở giữa.
  2. Không sử dụng hình cầu trừ khi cần thiết. Không có lý do nào để q trở thành toàn cầu.
  3. Không trả lại mà không có giá trị trong hàm không trống (int).
+6

Bổ sung: Bạn nhận được * Ngoại lệ dấu chấm động * vì máy tính của bạn không có trường hợp đặc biệt cho * phân chia số nguyên bằng 0 *. Mô tả tốt hơn sẽ là * Ngoại lệ số học *, nhưng từ khóa sai này có lịch sử lâu dài và có thể không thể thay đổi được nữa. –

0

Nó được gây ra bởi n % x trong đó x = 0 trong vòng lặp đầu tiên. Bạn không có thể tính toán một mô đun liên quan đến 0.