ผลต่างระหว่างรุ่นของ "ศูนย์มีเครื่องหมาย"

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