Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การดำเนินงานจุดลอยตัวและการเชื่อมโยงใน C, C ++ และ Java


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