ศูนย์มีเครื่องหมาย

จากวิกิพีเดีย สารานุกรมเสรี
ไบยังการนำทาง ไปยังการค้นหา

ศูนย์มีเครื่องหมาย หมายถึงจำนวน 0 (ศูนย์) ที่ถูกกำกับด้วยเครื่องหมายบวกหรือลบ ได้แก่ −0 (ลบศูนย์) และ +0 (บวกศูนย์) ในเลขคณิตธรรมดาทั่วไป −0 = +0 = 0 อย่างไรก็ตาม การแทนจำนวนบางระบบในคอมพิวเตอร์อนุญาตให้มีศูนย์สองชนิดนี้ได้ ซึ่งเกิดขึ้นใน เครื่องหมายและขนาด กับ ส่วนเติมเต็มหนึ่ง ของการแทนจำนวนมีเครื่องหมายสำหรับจำนวนเต็ม และในการแทนจำนวนจุดลอยตัว

มาตรฐาน IEEE 754เส้นจำนวนจริงขยาย ตัวอย่างเช่น 1/−0 = − และ 1/+0 = +∞ ซึ่งการหารด้วยศูนย์จะเป็นอนิยามนทัศน์ของวิเคราะห์มีค่าต่ำกว่าเป็นลิมิตด้านเดียวเขียนได้เป็น x → 0ลบขนาดเล็กที่ถูกปัดเศษ

กเกี่ยวกับจำนวนเชิงซ้อน

การเข้ารหัส0000 และการแทนหนึ่ง (one's complement) แบบ 8 บิต ลบศูนย์แทนด้วยค่า 1111 1111 การเข้ารหัสทั้งสามชนิดนั้น บวกศูนย์แทนด้วยค่า 0000 0000

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

ในจำนวนจุดลอยตัวฐานสองของ IEEE 754 ค่าศูนย์ทั้งสองแทนโดยกำหนดให้บิตเลขชี้กำลังและเลขนัยสำคัญเป็นศูนย์ทั้งหมด สำหรับลบศูนย์ก็กำหนดให้บิตเครื่องหมายเป็นหนึ่ง เราอาจได้ลบศูนย์เป็นผลลัพธ์จากการคำนวณเฉพาะอย่าง ตัวอย่างเช่นผลจากภาวะน้อยเกินเก็บเชิงเลขคณิต (arithmetic underflow) ของจำนวนลบ หรือ −1.0*0.0 หรือเพียงแค่ −0.0

ในการเข้ารหัสจำนวนจุดลอยตัวฐานสิบของ IEEE 754 ลบศูนย์แทนโดยกำหนดให้เลขชี้กำลังเป็นค่าใดก็ได้ที่ใช้ได้ในพิสัยของการเข้ารหัส เลขนัยสำคัญกำหนดให้เป็นศูนย์ และบิตเครื่องหมายเป็นหนึ่ง

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

มาตรฐาน IEEE 754 เกี่ยวกับจำนวนจุดลอยตัวได้ระบุพฤติกรรมของบวกศูนย์และลบศูนย์ไว้ภายใต้การดำเนินการหลายอย่าง ผลลัพธ์ที่ได้อาจขึ้นอยู่กับการตั้งค่าภาวะการปัดเศษแบบ IEEE

เลขคณิต[แก้]

การคูณและการหารปฏิบัติตามกฎการผสานเครื่องหมายอันเป็นปกติดังนี้

  • (สำหรับค่า x ที่ไม่ใช่ศูนย์)

การบวกและการลบถูกจัดการโดยเฉพาะถ้าค่าต่าง ๆ อาจถูกตัดออกได้ ดังนี้

  • (สำหรับจำนวนจำกัด x ใด ๆ; หรือเท่ากับ −0 กรณีปัดเศษเข้าสู่จำนวนลบ)

เนื่องจากมีค่าลบศูนย์อยู่ในระบบการแทนจำนวน ประโยค z = −(xy) และ z = (−x) − (−y) จึงไม่สามารถลดทอนให้เป็น z = yx ได้ เมื่อ x, y, z เป็นจำนวนจุดลอยตัว

กฎพิเศษอื่น ๆ มีดังนี้

  • [1]
  • (ปฏิบัติตามกฎเครื่องหมายสำหรับการหาร)
  • (สำหรับค่า x ที่ไม่ใช่ศูนย์; ปฏิบัติตามกฎเครื่องหมายสำหรับการหาร)
  • (ไม่ใช่จำนวน หรือขัดจังหวะให้แก่รูปแบบยังไม่กำหนด)

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

การเปรียบเทียบ[แก้]

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

  • การเล่นชนิดข้อมูล (type punning) โดยเปลี่ยนให้เป็นชนิดจำนวนเต็ม แล้วเปรียบเทียบรูปแบบบิต
  • การใช้ฟังก์ชัน copysign() ของ IEEE 754 เพื่อคัดลอกเครื่องหมายของศูนย์ไปยังจำนวนอื่นที่ไม่ใช่ศูนย์
  • การคำนวณส่วนกลับของศูนย์เพื่อให้ได้ 1/+0 = +∞ หรือ 1/−0 = −∞ อย่างใดอย่างหนึ่ง

การแปลงชนิดข้อมูล (type casting) เป็นชนิดจำนวนเต็มจะไม่ได้ผลเสมอไป โดยเฉพาะอย่างยิ่งบนระบบส่วนเติมเต็มสอง

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

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

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

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

  1. Cowlishaw, Mike (7 April 2009). "Decimal Arithmetic: Arithmetic operations - square-root". speleotrove.com (IBM Corporation). สืบค้นเมื่อ 7 December 2010.
  • "Floating point types". MSDN C# Language Specification. สืบค้นเมื่อ October 15. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help)
  • "Division operator". MSDN C# Language Specification. สืบค้นเมื่อ October 15. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help)
  • Thomas Wang (March 2000). "Java Floating-Point Number Intricacies". September 2000.
  • "Specification". General Decimal Arithmetic: Encoding Strawman 4d, version 0.96. สืบค้นเมื่อ October 16. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help) — a decimal floating point specification that includes negative zero
  • Kittel, Charles (1980). Thermal Physics. W. H. Freeman & Company. ISBN 0716710889. Unknown parameter |coauthors= ignored (|author= suggested) (help)

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

  • Michael Ingrassia. "Fortran 95 SIGN Change". Sun Developer Network. สืบค้นเมื่อ October 15. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help) — the changes in the Fortran SIGN function in Fortran 95 to accommodate negative zero
  • "JScript data types". MSDN JScript. สืบค้นเมื่อ October 16. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help) — JScript's floating point type has negative zero by definition
  • "A look at the floating-point support of the Java virtual machine". Javaworld. สืบค้นเมื่อ October 16. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help) — representation of negative zero in the Java virtual machine
  • Bruce Dawson. "Comparing floating point numbers". — how to handle negative zero when comparing floating-point numbers
  • John Walker. "Minus Zero". UNIVAC Memories. สืบค้นเมื่อ October 17. Unknown parameter |accessyear= ignored (|access-date= suggested) (help); Check date values in: |accessdate= (help) — One's complement numbers on the UNIVAC® 1100 family computers.