2013-10-01 15 views
6

Tôi khá mới với Lua. Trong khi thử nghiệm, tôi đã phát hiện #INF/#IND. Tuy nhiên, tôi không thể tìm thấy một tài liệu tham khảo tốt mà giải thích nó.Trong Lua, #INF và #IND là gì?

#INF, #IND và loại tương tự (chẳng hạn như phủ định) và cách bạn tạo và sử dụng chúng?

+1

'1/0',' -1/0' và '0/0' –

+0

build Lua bạn phải đang sử dụng một loại dấu chấm động cho' loại number' Lua của . (Xây dựng Lua mặc định sử dụng kiểu '' double'.) Xem [Mỗi nhà khoa học máy tính nên biết gì về số học dấu chấm động] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg .html) bởi David Goldberg. –

Trả lời

7

#INF là vô hạn, #IND là NaN. Cung cấp cho nó một thử nghiệm:

print(1/0) 
print(0/0) 

Output trên máy tính Windows của tôi:

1.#INF 
-1.#IND 

Như không có đại diện tiêu chuẩn cho những trong ANSI C, bạn có thể nhận được kết quả khác nhau. Ví dụ:

inf 
-nan 
+1

'-1. # IND' là một mẫu NaN cụ thể được gọi là' INDEFINITE'. Mẫu bit cho phiên bản chính xác kép là '0xfff800000000000'. – njuffa

6

Mở rộng @YuHao đã có câu trả lời hay.

Lua ít khi chuyển đổi một số thành chuỗi, vì nó phụ thuộc rất nhiều vào triển khai thư viện C cơ bản. Trong thực tế, Lua print implementation gọi Lua tostring do đó (sau một loạt các cuộc gọi khác) sử dụng lua_number2str macro, được xác định theo điều khoản của C sprintf. Vì vậy, cuối cùng bạn thấy bất kỳ đại diện cho infinities và NaNs việc thực hiện C sử dụng (điều này có thể thay đổi theo trình biên dịch được sử dụng để biên dịch Lua và thời gian chạy C ứng dụng của bạn được liên kết đến).

2

@YuHao đã chỉ ra ý nghĩa của +/- 1. # INF (+ -inf) và -1. # IND (nan), vì vậy tôi sẽ chỉ thêm cách xử lý (mà tôi chỉ cần) trong Lua:

  • "inf" (+/- 1. # INF) là các giá trị số cao hơn (Lua/C) có thể đại diện và ngôn ngữ cung cấp hằng số cho bạn: "math.huge". Vì vậy, bạn có thể kiểm tra một số bên trong Lua cho + -INF; Hàm "isINF()" dưới đây cho biết cách sử dụng nó.
  • "nan" (- 1. # IND) là cái gì đó không thể được xử lý bằng số: nó phải là một số, nó không, và bất cứ điều gì bạn làm với nó là bất cứ điều gì nhưng cũng có một số. với ý nghĩ đó, hãy nhớ rằng không có NaN nào bằng NaN khác; kiểm tra NaN như hàm "isNAN()" bên dưới.

local function isINF(value) 
    return value == math.huge or value == -math.huge 
end 

local function isNAN(value) 
    return value ~= value 
end 

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