ใน 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