อย่างน้อยใน Java ถ้าฉันเขียนรหัสนี้:
float a = 1000.0F;
float b = 0.00004F;
float c = a + b + b;
float d = b + b + a;
boolean e = c == d;
ค่าของจะฉลิตรsอี ฉันเชื่อว่าสิ่งนี้เกิดจากข้อเท็จจริงที่ว่าการลอยตัวนั้นมีข้อ จำกัด อย่างมากในการแสดงตัวเลขอย่างแม่นยำ แต่ฉันไม่เข้าใจว่าทำไมแค่การเปลี่ยนตำแหน่งของaอาจทำให้ความไม่เท่าเทียมนี้เกิดขึ้น
ฉันลด s เป็นหนึ่งในทั้งบรรทัด 3 และ 4 ดังด้านล่างค่าของeอย่างไรก็ตามกลายเป็นt r u e :
float a = 1000.0F;
float b = 0.00004F;
float c = a + b;
float d = b + a;
boolean e = c == d;
เกิดอะไรขึ้นในบรรทัดที่ 3 และ 4 ทำไมการดำเนินการเพิ่มเติมด้วยการลอยตัวจึงไม่เชื่อมโยงกัน?
ขอบคุณล่วงหน้า.
X
เป็นจำนวนมากและจำนวนน้อยมากเช่นว่าY
X + Y = X
ที่นี่X + Y + -X
จะเป็นศูนย์ แต่X + -X + Y
จะเป็นY
อย่างไร