ใน C, C++, และ Java เราทำการคำนวณกับตัวเลขจุดทศนิยม ตรวจสอบว่าตัวเลขจุดทศนิยมปฏิบัติตามกฎ associativity หรือไม่
คำตอบคือ ไม่ปฏิบัติ ในบางกรณี ตัวเลขจุดทศนิยมไม่ปฏิบัติตาม associativity ดูตัวอย่าง:
โค้ดตัวอย่าง
#include<iostream> using namespace std; main() { float x = -500000000; float y = 500000000; float z = 1; cout << "x + (y + z) is: " << x + (y + z) << endl; cout << "(x + y) + z is " << (x + y) + z << endl; }ผลลัพธ์
x + (y + z) is: 0 (x + y) + z is 1
ผลลัพธ์ไม่เหมือนกัน แม้ทฤษฎีแล้วควรเป็น 1 ทั้งคู่ เกิดจากการปัดเศษ floating point: ใน x + (y + z) ค่า (500000000 + 1) ปัดกลายเป็น 500000000 อีกครั้ง บวก -500000000 ได้ 0 แต่ (x + y) + z คือ (-500000000 + 500000000) = 0 บวก 1 ได้ 1
ถ้าใช้ integer ทั้งสองนิพจน์จะให้ผลลัพธ์ 1 เหมือนกัน