−0

จากวิกิพีเดีย สารานุกรมเสรี

−0 คือตัวแทนของ ลบศูนย์ (อังกฤษ: negative zero) เป็นจำนวนหนึ่งที่มีในระบบคอมพิวเตอร์ นอกเหนือจาก 0 ในระบบการแทนจำนวนมีเครื่องหมาย (signed number) สำหรับจำนวนเต็มบางระบบ และระบบการแทนจำนวนมีจุดทศนิยม (floating point) แทบทุกระบบ แต่ในทางคณิตศาสตร์นั้นไม่มีการแบ่งแยกศูนย์ที่เป็นลบหรือเป็นบวก ดังนั้น −0 จึงมีความหมาย "เทียบเท่า" กับ 0

สำหรับการใช้โดยทั่วไป −0 หมายถึงจำนวนลบที่สามารถปัดเศษขึ้นเป็นค่าศูนย์ หรือจำนวนลบที่เข้าใกล้ศูนย์ทางซ้าย วิทยาศาสตร์บางสาขาจำเป็นต้องใช้ค่า −0 ในการเก็บสถิติหรือการรายงานผล

เนื้อหา

[แก้] การแทนในคอมพิวเตอร์

ลบศูนย์ในระบบการแทนจำนวนมีจุดทศนิยม IEEE 754 แบบ 32 บิต

ในระบบการแทนจำนวนแบบ 8 บิตของจำนวนเต็ม โดยมีบิตที่ 7 เป็นบิตกำกับเครื่องหมาย จำนวนลบศูนย์สามารถแทนด้วยเลขฐานสอง 10000000 และส่วนเติมเต็มหนึ่ง (ones' complement) ของจำนวนลบศูนย์คือ 11111111 ส่วนในระบบการแทนจำนวนมีจุดทศนิยมตามมาตรฐาน IEEE 754 จำนวนลบศูนย์เขียนแทนด้วย เลขชี้กำลังและแมนทิสซาที่เท่ากับศูนย์ทั้งคู่ และบิตกำกับเครื่องหมายเป็นหนึ่ง (หมายถึงค่าลบ)

ข้อกำหนดการเข้ารหัสเลขคณิตฐานสิบทั่วไป (General Decimal Arithmetic) ของไอบีเอ็ม กำหนดให้จำนวนลบศูนย์สามารถแทนได้ด้วย เลขชี้กำลังที่เป็นค่าใดๆ ก็ได้ในช่วงที่อนุญาต (ต่างกับ IEEE 754 ที่ต้องเป็นศูนย์) สัมประสิทธิ์ (แมนทิสซา) จะต้องเป็นศูนย์ทั้งหมด และบิตกำกับเครื่องหมายจะต้องเป็นหนึ่ง

จำนวนลบศูนย์ไม่สามารถแยกแยะออกจากจำนวนบวกศูนย์ด้วยการดำเนินการส่วนเติมเต็มสอง (two's complement) ซึ่งเป็นการกลับเครื่องหมายของจำนวนมีเครื่องหมายทั่วไป หรือกล่าวอีกนัยหนึ่งคือ ลบศูนย์ไม่มีส่วนเติมเต็มสอง

[แก้] คุณสมบัติและการจัดการ

ในภาษาโปรแกรมอย่างเช่น ภาษาซี ภาษาซีชาร์ป ภาษาซีพลัสพลัส และภาษาจาวา มีความเป็นไปได้ที่จะดึงค่าลบศูนย์ออกมาเป็นผลลัพธ์ของนิพจน์ (เช่นจากผลลัพธ์ของภาวะน้อยเกินเก็บ (underflow) ทางเลขคณิต) ตามปกติแล้วจำนวนลบศูนย์และบวกศูนย์เมื่อเปรียบเทียบตามค่าจะให้ผลเท่ากัน ดังนั้นการเปรียบเทียบแบบธรรมดาไม่เพียงพอที่จะทดสอบว่าเป็นลบศูนย์หรือไม่

แนวทางในการทดสอบมีดังนี้

  • ใช้ฟังก์ชัน copysign () ที่กำหนดโดย IEEE 754 เพื่อคัดลอกเครื่องหมายของศูนย์ ไปยังจำนวนอื่นที่ไม่เป็นศูนย์
  • นำจำนวนบวกตัวหนึ่งมาหารด้วยจำนวนศูนย์ ซึ่งจะให้ผลลัพธ์เป็นค่าอนันต์ที่มีเครื่องหมายเดิมกำกับ (ระบบการแทนจำนวนมีจุดทศนิยม สามารถเก็บค่าอนันต์ที่มีเครื่องหมายได้) กล่าวคือ
    • \frac{x}{+0} = +\infty (สำหรับจำนวนบวก x)
    • \frac{x}{-0} = -\infty (สำหรับจำนวนบวก x)
  • ใช้ฟังก์ชันนี้เพื่อตรวจสอบค่าลบศูนย์ในจาวาสคริปต์
function isNegativeZero (x) { return x === 0 && 1/x < 0; }
isNegativeZero (-0.0) ; // ผลลัพธ์: จริง
isNegativeZero ( 0.0) ; // ผลลัพธ์: เท็จ
  • ในภาษาจาวา ให้ใช้เมทอด equals ในคลาส Double ซึ่งลบศูนย์จะมีความหมายต่างจากบวกศูนย์ ดังตัวอย่าง
Double negativeZero = new Double (-0.0) ;
negativeZero.equals (-0.0) ; // ผลลัพธ์: จริง
negativeZero.equals ( 0.0) ; // ผลลัพธ์: เท็จ
  • ในภาษาซี ให้ใช้เทคนิคที่ขึ้นอยู่กับการแทนค่าในฮาร์ดแวร์ของคอมพิวเตอร์เครื่องนั้น ตัวอย่างเช่น
* (int *) &var == 0x80000000

ด้านล่างนี้คือการดำเนินการอื่นๆ ที่เกี่ยวข้องกับลบศูนย์

  • \frac{-0}{x} = -0\,\! (สำหรับจำนวนบวก x)

  • \frac{-0}{x} = +0\,\! (สำหรับจำนวนลบ x)

  • \frac{+0}{x} = -0\,\! (สำหรับจำนวนลบ x)

  • \frac{-0}{+\infty} = -0\,\!

  • \frac{-0}{-\infty} = +0\,\!

  • \frac{+0}{-\infty} = -0\,\!

  •  (-0) \cdot (-0) = +0\,\!

  •  (-0) - (+0) = -0\,\!

  •  (-0) - (-0) = +0\,\!

  •  (+0) + (-0) = +0\,\!

  •  (-0) + (-0) = -0\,\!

  • \left| x \right| \cdot (-0) = -0\,\!

  • x + (-0) = x\,\!

  • \sqrt{-0} = -0

[แก้] การใช้งานทางวิทยาศาสตร์

−0 สามารถใช้แทนอุณหภูมิต่ำกว่าศูนย์ในอุตุนิยมวิทยา โดยเฉพาะในสเกลเซลเซียส −0 มักเป็นสิ่งสำคัญด้วยเหตุผลทางสถิติ เมื่อมีค่าไม่ต่ำพอที่จะปัดเศษให้เป็น −1 เช่นอุณหภูมิที่ −0.2 องศาเซลเซียส และค่านี้ไม่สามารถรายงานผลให้เป็น 0 องศาเซลเซียส เนื่องจากค่า 0 องศาจะไม่ถือว่าต่ำกว่าศูนย์ สำหรับการเก็บสถิติวันที่มีอุณหภูมิต่ำกว่าศูนย์องศา ซึ่งเป็นข้อมูลสถิติพื้นฐานของการเปรียบเทียบความหนาวเย็นในฤดูหนาว ดังนั้นจึงไม่สามารถละเลยไปได้

ในเรื่องของกลศาสตร์เชิงสถิติ ระบบเฉพาะที่อยู่ในสถานะของการผกผันประชากร (population inversion) อาจถูกพิจารณาว่ามีอุณหภูมิสัมบูรณ์ (absolute temperature) เท่ากับ −0 ซึ่งเป็นค่าสูงสุดเท่าที่เป็นไปได้

[แก้] อ้างอิง

  • Floating point types. MSDN C# Language Specification. สืบค้นวันที่ October 15, 2005
  • Division operator. MSDN C# Language Specification. สืบค้นวันที่ October 15, 2005
  • Thomas Wang (March 2000). "Java Floating-Point Number Intricacies". September 2000.
  • Specification. General Decimal Arithmetic: Encoding Strawman 4d, version 0.96. สืบค้นวันที่ October 16, 2005 — a decimal floating point specification that includes negative zero
  • Kittel, Charles; and Herbert Kroemer (1980). Thermal Physics. W. H. Freeman & Company. ISBN 0716710889. 

[แก้] แหล่งข้อมูลอื่น

ดึงข้อมูลจาก "http://th.wikipedia.org/wiki/%E2%88%920".
เครื่องมือส่วนตัว