ใน C, C++ และ java เราดำเนินการทางคณิตศาสตร์ด้วยตัวเลขทศนิยม ตอนนี้เราจะตรวจสอบว่าตัวเลขทศนิยมเป็นไปตามกฎการเชื่อมโยงหรือไม่
คำตอบคือไม่ ตัวเลขทศนิยมไม่เป็นไปตามกฎการเชื่อมโยงในบางกรณี เราจะมาดูตัวอย่างกัน
โค้ดตัวอย่าง
#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 เสมอ คำถามมาถึงแล้ว ทำอย่างไร?
ในกรณีแรก x + (y + z) กำลังดำเนินการ (500000000 + 1) แต่สำหรับจุดลอยตัวนอกนั้น จะถูกแปลงเป็น 500000000 อีกครั้ง ตอนนี้โดยการเพิ่ม -500000000 เข้าไป มันจะกลายเป็น 0 ในนิพจน์ที่สอง ค่าคือ (-500000000 + 500000000) =0 จากนั้นเพิ่ม 1 ดังนั้นผลลัพธ์สุดท้ายคือ 1
หากเราใช้จำนวนเต็ม นิพจน์ทั้งสองจะแสดงผลลัพธ์เดียวกัน ซึ่งก็คือ 1