2
Inf và NaN trong Python là gì?
2
Hán Giang20 đã đăng:

Mình thử InfNan trong Python với các câu lệnh như sau,

num = float("Inf")
print num # = inf

a_num = float("Nan")
print a_num # = nan

print num > a_num # = False
print a_num > num # = False

print num > 1000 # = True
print a_num > 1000 # = False

print 10 + num # = inf
print num + a_num # = nan

al = float("Blah") # Lỗi: Could not convert string to float: Blah

Tại sao chúng lại hoạt động khác biệt như vậy nhỉ? Có sự đặc biệt gì về InfNan trong ngôn ngữ lập trình Python không? Tại sao câu lệnh cuối cùng lại hoạt động sai?

thêm bình luận...
2
VTV330 đã đăng:

Infviết tắt của từ Infinity trong toán học là một số vô cùng lớn, cụ thể ở đây là dương vô cùng $+ \infty$, tương tự chúng ta có số âm vô cùng $- \infty$, hai số này được định nghĩa trong Python dưới dạng kiểu dữ liệu float.

print type(num) # = <type 'float'>

Ví dụ nếu bạn bình phương một số vô cùng lớn cụ thể, Python sẽ trả về kết quả là inf ám chỉ kết quả của phép nhân là một con số rất rất lớn.

a = 1e1000
print a**a # = inf

Nan viết tắt của từ Not a number có thể hiểu là không phải là số.

Ví dụ nếu bạn lấy hai số vô cùng lớn chia nhau, về mặt thuần toán học bạn biết rằng kết quả sẽ bằng $1$ nhưng Python không hoạt động như vậy, hai số vô cùng lớn chỉ là biệt danh không phải là số cụ thể, Python sẽ trả về Nan.

a = float('Inf')
b = float('Inf')
print a / b # = nan

Câu hỏi cuối cùng của bạn, Blah không phải là kí hiệu của một số gì đặc biệt trong Python hết mà là do tự bạn đưa vào, nên Python không biết và trả về lỗi là điều tất nhiên.

Cứ theo tính chất của số dương vô cùng là số lớn nhất,

print num > 1000 # = True là điều hiển nhiên bởi số dương vô cùng sẽ lớn hơn 1000.
print a_num > 1000 # = False là chính xác bởi 1000 không thể lớn hơn số dương vô cùng.

Một số vốn dĩ đã vô cùng lớn, cộng thêm nữa cũng là một số vô cùng lớn đùng không nào.

print 10 + num # = inf

Một số được xác định "không phải là số" thì không thể so sánh nó với bất kỳ số nào được. Vì đã không phải là số rồi thì làm sao bạn có thể so sánh đúng không nào.

print num > a_num # = False bởi vì không thể so sánh.
print a_num > num # = False bởi vì không thể so sánh.

Cuối cùng, một số "không phải là số" cộng với bất cứ số nào thì kết quả "không phải là số" là điều hiển nhiên.

print num + a_num # = nan
đã bổ sung 5.7 năm trước bởi
Avatar: VTV3 VTV330
thêm bình luận...
0
MOP-Kids0 đã đăng:

Inf viết tắt của từ Infinity, là số dương vô cùng.

Nanviết tắt của từ Not a Number, với ý nghĩa không phải là số.

Dựa vào hai tính chất của số dương vô cùng trong toán và một số nếu được xác định không phải là số thì bạn có thể dễ dàng biết tại sao kết quả là True, False, inf hoặc nan.

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)