2010-08-09 63 views
20

Có thể kiểm tra xem một số có phải là NaN hay không?kiểm tra số NaN

+3

NIL (NULL trong C-ese) là một con trỏ * * giá trị đặc biệt. Không có thứ như NULL cho số. Có lẽ bạn đang nghĩ đến các điểm NaN nổi? – zwol

+0

Tôi có nghĩa là NaN, xấu của tôi, đã khắc phục sự cố Q. – MBZ

+0

Nhân bản: http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c – GManNickG

Trả lời

31

Có, bằng cách sử dụng thực tế là NaN không bằng bất kỳ số nào khác, bao gồm chính nó.

Điều đó có ý nghĩa khi bạn nghĩ về những gì NaN có nghĩa là bạn đã tạo một giá trị không thực sự nằm trong quyền lực của bạn để đại diện cho các giá trị dấu phẩy động "bình thường".

Vì vậy, nếu bạn tạo hai số mà bạn không biết chúng là gì, bạn khó có thể cân nhắc chúng bằng nhau. Họ có thể nhưng, với khả năng khá lớn của các con số mà nó có thể (vô hạn trong thực tế), cơ hội hai là cùng một số là vanishingly nhỏ :-)

Bạn có thể tìm kiếm một hàm (vĩ mô thực sự) như isnan (trong math.h cho C và cmath cho C++) hoặc chỉ sử dụng những tài sản mà giá trị NaN không bằng chính nó với một cái gì đó như:

if (myFloat != myFloat) { ... } 

Nếu vì một lý do kỳ lạ, thực hiện C của bạn không có isnan (nên, vì tiêu chuẩn bắt buộc), bạn có thể tự viết mã của riêng mình, vì vậy mething như:

int isnan_float (float f) { return (f != f); } 
+2

Và làm bọc 'myFloat! = myFloat' vào một số chức năng' isnan' với một chú thích, vì sợ những người đọc tương lai không biết về nó rất bối rối. – GManNickG

-1

bạn đang tìm kiếm null, nhưng điều đó chỉ hữu ích cho con trỏ. một số không thể tự rỗng, nó có giá trị đã biết mà bạn đặt vào đó hoặc dữ liệu ngẫu nhiên từ bất kỳ thứ gì đã có trong bộ nhớ trước đó.

7

Dưới Linux/gcc, có isNaN (double), phù hợp với BSD4.3.

C99 cung cấp fpclassify (x)isnan (x).
(Nhưng C++ tiêu chuẩn/trình biên dịch không nhất thiết bao gồm chức năng C99.)

Phải có một cách nào đó với std :: numeric_limit <> ... Kiểm tra ...

Doh. Tôi đáng lẽ phải biết ... Câu hỏi này đã được trả lời trước ... Checking if a double (or float) is NaN in C++ Using NaN in C++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan

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