-0

&minus;0 là biểu diễn của số âm không (0) (tiếng Anh: negative zero) - một con số tồn tại trong máy tính, phát sinh do một số phương pháp biểu diễn số nguyên âm và hầu hết các phương pháp biểu diễn số chấm động (floating point).

Có nhiều phương pháp được sử dụng để biểu diễn số âm trong máy tính. Trong những phương pháp đó, có một số phương pháp làm cho số không có thể được biểu diễn ở hai dạng: một dạng có dấu (&minus;) và một dạng không dấu (+). Số âm không là dạng biểu diễn có dấu của số không.

Toán học không có định nghĩa tương đương về số âm không. Do đó, &minus;0 và 0 là hoàn toàn như nhau. Trong các khoa học khác, &minus;0 có thể được sử dụng để biểu thị một số lượng nhỏ hơn không, nhưng không đáng kể, nên không thể làm tròn thành một con số có nghĩa.

Biểu diễn
Với số nguyên (xét mẫu 8 bit), phương pháp dấu lượng (sign-and-magnitude) biểu diễn số âm không sang hệ nhị phân thành 10000000;với phương pháp biểu diễn số bù 1 (one's complement), con số đó là 11111111.
Với chuẩn số chấm động IEEE 754 số âm không được biểu diễn theo cách sau:
:Tất cả các bit biểu diễn độ lớn của số, bao gồm phần nằm trước (phần định trị, tiếng Anh: mantissa) và phần nằm sau (phần mũ, tiếng Anh: exponent) dấu chấm thập phân, đều là 0.
:Bit dấu là 1.

Hiện nay, phương pháp biểu diễn số nguyên âm thông dụng nhất là phương pháp biểu diễn số bù 2 (two's complement). Phương pháp bù 2 không làm phát sinh số âm không. Đây là lý do khiến nó được sử dụng rộng rãi, vì nhờ chỉ có một dạng biểu diễn cho số không, các phép toán có thể được thực hiện dễ dàng hơn.

Tính chất và cách sử dụng
Trong các ngôn ngữ lập trình như C, C, C++, Java, ta có thể thu được số âm không khi thực hiện một số biểu thức tính toán đặc biệt. Tuy số âm không (&minus;0) và số dương không (+0) là hai số khác nhau, nhưng với các ngôn ngữ này, chúng sẽ bằng nhau khi thực hiện phép so sánh. Do đó, cần chú ý rằng, ta không thể dùng đoạn mã sau (Java) để xác định xem một số có phải là số &minus;0 hay không?

// Giả sử giá trị của a là &minus;0 và b là +0
if (a CopySign() định nghĩa bởi chuẩn IEEE 754. Ta dùng hàm này để sao chép dấu của số &minus;0 sang một số khác không, rồi xác định dấu của &minus;0 thông qua số này.

Ta cũng có thể sử dụng phép chia để phân biệt số âm không và số dương không:
x / +0 = +\infty (x là số dương)
x / -0 = -\infty (x là số dương)

Dưới đây là một số kết quả của các phép toán có số âm không:
-0 / x = -0 (x là số dương)
-0 / x = +0 (x là số âm)
+0 / x = -0 (x là số âm)
-0 / +\infty = -0
-0 / -\infty = +0
+0 / -\infty = -0
-0 \times -0 = +0
-0 - +0 = -0
-0 - -0 = +0
+0 + -0 = +0
-0 + -0 = -0
x \times -0 = -0 (x là số dương)

Sử dụng số âm không trong khoa học
Trong khí tượng học, để tiện thống kê, người ta có sử dụng số âm không. Số âm không được sử dụng để biểu diễn nhiệt độ dưới không nhưng chưa đủ nhỏ để có thể làm tròn thành &minus;1. Ví dụ: giả sử nhiệt độ đo được là &minus;0,2. Rõ ràng, đây là nhiệt độ dưới không. Vì việc quan sát những nhiệt độ nhỏ hơn không rất quan trọng nên ta không thể làm tròn &minus;0,2 thành 0. Hơn nữa, ta cũng không thể làm tròn &minus;0,2 thành &minus;1. Lúc đó, người ta sử dụng &minus;0.

Chú thích

Liên kết ngoài




a decimal floating point specification that includes negative zero
the changes in the Fortran SIGN function in Fortran 95 to accommodate negative zero
JScript's floating point type with negative zero by definition
representation of negative zero in the Java virtual machine
how to handle negative zero when comparing floating-point numbers
one's complement numbers on the UNIVAC 1100 family computers