2009-09-19 30 views
13

Tôi nhận được độ dốc của một đường bao quanh bởi hai điểmTại sao sự cố này không xảy ra? Tôi không phân chia bằng không ở đây sao?

float slopeXY(CGPoint p1, CGPoint p2) 
{ 
    return ((p2.y - p1.y)/(p2.x - p1.x)); 
} 

Nếu tôi cung cấp cho nó một đường zero-kích thước,

CGPoint p1 = CGPointMake(0, 10); 
CGPoint p2 = CGPointMake(0, 10); 

float sxy = slopeXY(p1, p2); 

Tôi không nhận được một chia cho số không lỗi.

+14

dường như bạn đã tìm thấy cách chia cho số không. Sử dụng cẩn thận, hoặc bạn có thể xé một lỗ trong không-thời gian và thế giới của chúng ta sẽ bị nuốt chửng bởi vô cùng. –

Trả lời

28

Với môi trường dấu phẩy động mặc định trên OS X, phân chia dấu phẩy động bằng 0 không gây ra bẫy hoặc ngoại lệ. 0.0/0.0 thay vào đó sẽ trả về một NaN và tăng cờ trạng thái dấu phẩy không hợp lệ trong fpscr. Chia giá trị khác 0 bằng 0.0 sẽ trả về vô hạn và tăng cờ chia cho số không.

Bạn có thể kiểm tra các điều kiện, nếu bạn cần, sử dụng isNaN() và isinf() chức năng quy định tại math.h

4

Divide by zero lỗi chỉ xảy ra đối với phân chia số nguyên. Đối với phao, thông thường bạn nhận được vô cùng, trừ khi cổ tức bằng không.

1

Lỗi dấu chấm động thường không làm tăng ngoại lệ.

1

Vì Hành vi không xác định. Chương trình của bạn được phép hành xử theo bất kỳ cách nào, điều này có thể bao gồm sự cố hoặc cho chúng ta thấy cái nhìn cuối cùng về vũ trụ mà bạn bị phá hủy một cách không hoàn toàn bằng cách chia cho số không.

Từ C [99] Chuẩn, §6.5.5.5:

Kết quả của/nhà điều hành là thương từ các bộ phận của toán hạng fi đầu tiên bởi thứ hai; kết quả của toán tử% là phần còn lại. Trong cả hai hoạt động, nếu giá trị của toán hạng thứ hai bằng 0, hành vi không được xác định.

+4

Hành vi là * không * không xác định, vì trình biên dịch OS X tuân theo Phụ lục F của cùng một tiêu chuẩn. Phần F.3.1 của C [99] nói rằng "+, -, *, và/các toán tử cung cấp các hoạt động cộng, trừ, nhân và chia IEC 60559", và IEC60559/IEEE-754 xác định kết quả phân chia bằng không. –

+0

Oh. Đó có phải chỉ dành cho phao nổi không? – aib

Các vấn đề liên quan