−0 là dạng biểu diễn của số âm không (0) trong tiếng Anh gọi là negative zero - một khái niệm xuất hiện trong máy tính do các 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 cách để biểu diễn số âm trong máy tính. Một số cách cho phép số không được biểu diễn ở hai dạng: một dạng có dấu (−) và một dạng không dấu (+). Số âm không là dạng có dấu của số không.
Trong toán học, không có khái niệm tương đương với số âm không, do đó, −0 và 0 là hoàn toàn giống nhau. Trong các ngành khoa học khác, −0 có thể được sử dụng để biểu thị một 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 số có ý nghĩa.
Biểu diễn
Đối với số nguyên (xét mẫu 8 bit), phương pháp dấu lượng (dấu và biểu diễn) biểu diễn số âm không chuyển đổi sang hệ nhị phân thành 10000000; với phương pháp biểu diễn số bù 1 (phản đảo một lần), con số đó là 11111111. Với chuẩn số chấm động IEEE 754, số âm không được biểu diễn như sau:
- Tất cả các bit biểu diễn độ lớn của số, bao gồm cả phần trước (phần mantissa, tiếng Anh: mantissa) và phần sau (phần mũ, tiếng Anh: exponent) của dấu chấm thập phân, đều là 0.
- Bit dấu là 1.
Hiện nay, phương pháp phổ biến nhất để biểu diễn số nguyên âm là phương pháp số bù 2 (two's complement). Phương pháp này không dẫn đến số âm không. Điều này làm cho nó trở nên phổ biến vì chỉ có một cách để biểu diễn số không, từ đó các phép toán có thể thực hiện dễ dàng hơn.
Đặc tính và ứng dụng
Trong các ngôn ngữ lập trình như C, C#, C++, Java, chúng ta có thể nhận được số âm không khi thực hiện một số biểu thức tính toán đặc biệt. Mặc dù số âm không (−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 bằng nhau khi thực hiện phép so sánh. Vì vậy, cần chú ý rằng, ta không thể sử dụng mã sau (Java) để xác định xem một số có phải là số −0 hay không?
// Giả sử a = −0 và b = +0 if (a < b) { System.out.println('a là số âm không'); }
Để kiểm tra xem một số có phải là số âm không hay không, ta có thể sử dụng hàm CopySign()
theo chuẩn IEEE 754. Hàm này được dùng để sao chép dấu từ số −0 sang một số khác, từ đó xác định dấu của −0.
Cách khác để phân biệt số âm không và số dương không là sử dụng phép chia:
- (với x là số dương)
- (với x là số dương)
Dưới đây là một số kết quả của các phép toán với số âm không:
- (với x là số dương)
- “Loại số dấu phẩy động”. Thông lệ Ngôn ngữ C# MSDN. Truy cập ngày 15 tháng 10 năm 2005.
- “Toán tử chia”. Thông lệ Ngôn ngữ C# MSDN. Truy cập ngày 15 tháng 10 năm 2005.
- Thomas Wang (tháng 3 năm 2000). “Những rắc rối của số dấu phẩy động trong Java”. Tháng 9 năm 2000. Bản gốc lưu trữ ngày 21 tháng 9 năm 2005. Chú thích cho tạp chí cần
|tạp chí=
(trợ giúp) - Mike Colishaw (ngày 28 tháng 7 năm 2008). “Đặc tả toán học thập phân, phiên bản 1.68”. Truy cập ngày 14 tháng 8 năm 2008. – một đặc tả dấu phẩy động bao gồm cả số âm không
- Michael Ingrassia. “Thay đổi dấu của SIGN trong Fortran 95”. Mạng lưới Phát triển Sun. Truy cập ngày 15 tháng 10 năm 2005. – những thay đổi trong hàm
SIGN
của Fortran 95 để phù hợp với số âm không - “Các loại dữ liệu JScript”. Ngôn ngữ JScript MSDN. Truy cập ngày 16 tháng 10 năm 2005. – loại số dấu phẩy động của JScript với định nghĩa số âm không
- “Xem xét hỗ trợ số dấu phẩy động của máy ảo Java”. Thế giới Java. Bản gốc lưu trữ ngày 17 tháng 2 năm 2012. Truy cập ngày 16 tháng 10 năm 2005. – biểu diễn số âm không trong máy ảo Java
- Bruce Dawson (ngày 25 tháng 2 năm 2012). “So sánh số dấu phẩy động, phiên bản 2012”. – cách xử lý số âm không khi so sánh số dấu phẩy động
- John Walker. “Âm không”. Kí ức UNIVAC. Truy cập ngày 17 tháng 10 năm 2005. – số bù một trên các máy tính gia đoạn UNIVAC 1100