Computer >> Máy Tính >  >> Lập trình >> lập trình C

Phép toán dấu chấm động và tính liên kết trong C, C ++ và Java

Trong C, C ++ và java, chúng tôi thực hiện một số phép toán với số dấu phẩy động. Bây giờ ở đây chúng ta sẽ kiểm tra xem các số dấu phẩy động có tuân theo quy tắc kết hợp hay không.

Câu trả lời là không. Các số dấu phẩy động không tuân theo các quy tắc kết hợp trong một số trường hợp. Ở đây chúng ta sẽ xem một số ví dụ.

Mã mẫu

#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;
}

Đầu ra

x + (y + z) is: 0
(x + y) + z is 1

Ở đây, chúng ta có thể thấy các kết quả không giống nhau, nhưng về mặt lý thuyết chúng ta có thể nói rằng chúng sẽ luôn là 1. Bây giờ câu hỏi đặt ra, điều này được thực hiện như thế nào?

Trong trường hợp đầu tiên x + (y + z), (500000000 + 1) đang hoạt động. Nhưng đối với dấu chấm động tắt, nó lại được chuyển đổi thành 500000000. Bây giờ bằng cách thêm -500000000 với nó, nó sẽ trở thành 0. Trong biểu thức thứ hai, giá trị là (-500000000 + 500000000) =0, sau đó thêm 1 để kết quả cuối cùng là 1.

Nếu chúng ta sử dụng các số nguyên, thì cả hai biểu thức sẽ trả về cùng một kết quả, là 1.