2011-09-05 40 views
21

Có ai biết phương pháp để kiểm tra xem một đôi (hoặc số nguyên) là vô hạn, ví dụ khi hoạt động 1/0 được thực hiện?Kiểm tra đối tượng vi phạm mục tiêu

isfinite (n) dường như không hoạt động.

+7

Một số nguyên không thể là vô hạn. –

+0

Bạn có thể kiểm tra 'x * 2 == x && x! = 0' hoặc một cái gì đó tương tự ... Đối với NaN bạn có thể kiểm tra' x! = X'. –

+2

Bạn có thể làm rõ những gì bạn có nghĩa là bởi "' isfinite() 'dường như không hoạt động."? –

Trả lời

36

Bạn có thể kiểm tra

if(d == INFINITY) {} 

hoặc

if(d > DBL_MAX) {} 

INFINITY là một biểu phao liên tục quy định tại math.h đại diện cho dương vô cực;
DBL_MAX là hằng số được xác định trong float.h đại diện cho số tăng gấp đôi lớn nhất có thể được biểu diễn.

Kiểm tra cũng here

+0

Bạn có lẽ nên mô tả nơi những biểu tượng đến từ cho câu trả lời này là hữu ích. –

+0

nếu (d == INFINITY) xử lý, cảm ơn – John67

+1

@Kerrek SB: thêm thông tin bị thiếu – Saphrosit

17

<math.h> có một macro, isinf, được xác định để kiểm tra kích thước của đối số của nó và sau đó gọi các __isinf chức năng thích hợp cho các loại hình:

#define isinf(x) \ 
     ( sizeof (x) == sizeof(float) ? __isinff((float)(x)) \ 
     : sizeof (x) == sizeof(double) ? __isinfd((double)(x)) \ 
              : __isinf ((long double)(x))) 

vĩ mô là giống nhau trong kiến ​​trúc/i386/math.h và kiến ​​trúc/arm/math.h; việc triển khai các hàm có lẽ khác nhau.

này sẽ trở lại đúng với vô cực tiêu cực cũng như tích cực, bạn nên xảy ra gặp phải một điều như vậy:

2011-10-26 18: 41: 53,424 ToInfinityEtc [30.197: 903] Đúng vậy!
2011-10-26 18: 41: 53.426 ToInfinityEtc [30197: 903] Bạn betcha!

+0

nhưng isinf chỉ dành cho trình biên dịch GNU. không tương thích với llvm. xcode nói "sử dụng số nhận dạng chưa được xác nhận là" mặc dù cờ + nhấp vào điều hướng đến cmath.I đã nhập toán học.h theo cách thủ công. nhưng vẫn điều hướng đến cmath và yes không thể biên dịch vì lỗi này "sử dụng mã định danh undeclerated isinf". cuối cùng tôi thay thế std :: isinf thay vì isinf bây giờ biên dịch. –

+1

math.h và 'isinf()' [đều là một phần của tiêu chuẩn POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html), @N.Ramos. Họ không liên quan gì tới GCC. Bạn có một vấn đề khác ở đâu đó. –

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