2010-09-01 33 views
6

tôi chỉ tìm thấy một lỗi trong một số thao tác số trong chương trình của tôi và tôi nhận được một FloatDomainError (NaN)Ai đó có thể giải thích cho tôi về NaN trong Ruby không?

Vì vậy, tôi bắt đầu đăng nhập số lượng thông qua với:

if(metric.is_a?(Numeric)) 
    self.metric = metric 
else 
    LOGGER.warn("metriC#{metric} is not a number") 
    self.metric=0 
end 

Nhưng số lượng được thông qua tại là NaN hiển nhiên là is_a?(Numeric) vì tôi không nhận được cảnh báo nhật ký của mình và tôi chuyển số liệu vào phương pháp metric = của mình, đây là nơi tôi nhận được FloatDomainError

của mình ngay bây giờ, sửa tôi nếu tôi sai, nhưng không có vẻ sai ngữ nghĩa khi có một số NaN (Không phải là số) thuộc loại số ?? Ai đó có thể giải thích điều này với tôi?

BTW sử dụng JRuby-1.4.1

+1

Nếu có chỉ có một số nhà hàng Ấn Độ gần đó. :) không thể giúp: D –

+1

chúng tôi muốn có một câu trả lời ngon :) – brad

Trả lời

5

IEEE 754 số dấu phẩy động xác định -INFINITY + INFINITY và NotANumber để làm cho nó có thể phản ứng để cho phép chia bằng không. bạn cũng có thể tính toán với những ví dụ cho 2 + INF = INF

NaN không phải là một tính năng ruby ​​uniqe, họ là số trong java, C++, ... quá

7

Tôi nghĩ rằng làm NaN một số làm cho hoàn hảo cảm ...

thử 0.0/0.0 trong IRB -> kết quả là NaN (mà trong trường hợp này là vô cực)

Infinity là toán học loại một số, nhưng vẫn còn, bạn không thể diễn tả nó với một kiểu dữ liệu ... trong toán bạn sử dụng một biểu tượng đặc biệt quá ...

PS: bạn có thể sử dụng chỉ số .nan? để kiểm tra nó ... sau đó nó sẽ hoạt động như bạn mong đợi ...

+0

Công bằng đủ, tôi chỉ nghĩ rằng ngữ nghĩa rằng 'Không phải là một số' là một số là một chút lạ ... – brad

+0

@ brad: vâng, tôi đồng ý , tên cho trạng thái đó không được chọn tốt ... :) – apirogov

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