-0

con số tồn tại trong máy tính

−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 (−) 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 đó, −0 và 0 là hoàn toàn như nhau. Trong các khoa học khác, −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

sửa

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

sửa

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 (−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ố −0 hay không?

// Giả sử giá trị của a là −0 và b là +0
if (a < b)
{
System.out.println("a là số âm không");
}

Khi cần xác định xem một số có phải là số âm không hay không, ta có thể sử dụng hàm 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ố −0 sang một số khác không, rồi xác định dấu của −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 là số dương)
  •   (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:

  •   (x là số dương)
  •   (x là số âm)
  •   (x là số âm)
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •   (x là số dương)

Sử dụng số âm không trong khoa học

sửa

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 −1. Ví dụ: giả sử nhiệt độ đo được là −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 −0,2 thành 0. Hơn nữa, ta cũng không thể làm tròn −0,2 thành −1. Lúc đó, người ta sử dụng −0.

Chú thích

sửa

Liên kết ngoài

sửa
  • “Floating point types”. MSDN C# Language Specification. Truy cập ngày 15 tháng 10 năm 2005.
  • “Division operator”. MSDN C# Language Specification. Truy cập ngày 15 tháng 10 năm 2005.
  • Thomas Wang (tháng 3 năm 2000). “Java Floating-Point Number Intricacies”. September 2000. Bản gốc lưu trữ ngày 21 tháng 9 năm 2005. Chú thích journal cần |journal= (trợ giúp)
  • Mike Colishaw (ngày 28 tháng 7 năm 2008). “Decimal Arithmetic Specification, version 1.68”. Truy cập ngày 14 tháng 8 năm 2008. – a decimal floating point specification that includes negative zero
  • Michael Ingrassia. “Fortran 95 SIGN Change”. Sun Developer Network. Truy cập ngày 15 tháng 10 năm 2005. – the changes in the Fortran SIGN function in Fortran 95 to accommodate negative zero
  • “JScript data types”. MSDN JScript. Truy cập ngày 16 tháng 10 năm 2005. – JScript's floating point type with negative zero by definition
  • “A look at the floating-point support of the Java virtual machine”. Javaworld. 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. – representation of negative zero in the Java virtual machine
  • Bruce Dawson (ngày 25 tháng 2 năm 2012). “Comparing floating point numbers, 2012 Edition”. – how to handle negative zero when comparing floating-point numbers
  • John Walker. “Minus Zero”. UNIVAC Memories. Truy cập ngày 17 tháng 10 năm 2005. – one's complement numbers on the UNIVAC 1100 family computers
  NODES