30/09/2018, 16:22
Cần 1 sự giải thích cho phép toán số thực
tình hình là em càng học càng thấy mình dốt ra. , và cái đơn giản càng lúc càng khó hiểu. nên lên đây nhờ các bác chỉ thêm.
#include<iostream>
using namespace std;
void main()
{
double x = 1.123, y = 1.456;
double z = 2.579;
if (x + y == z) // xét trường hợp x + y = z
{ cout << " x + y = z " << endl;
}
else // trường hợp ngược lại, x + y khác z
{
cout << "x + y != z" << endl;
cout << "x + y - z = " << x + y - z << endl;
}
double a = 1.125, b = 1.250;
double c = 2.375;
if (a + b == c) // xét trường hợp a+b = c
{
cout << " a + b = c" << endl;
}
else // ngược lại a + b khác c
{
cout << " a + b != c" << endl;
}
}
cái khó hiểu ở đây là phép tính ở trên, mình nhìn thấy bằng mà…tại sao nó không bằng…hixhixx, bức xức quá ,…mà khi trừ ra…nó lại bằng -4,44089x10-16 ( xấp xỉ gần bằng 0 ) ??? tại sao ???
các bác cắt nghĩa cho em nhé
Bài liên quan
Lỗi làm tròn số dấu chấm động nhị phân. (Lỗi do người dùng không hiểu rõ phép toán dấu chấm động, không phải lỗi IDE)
Google IEEE-754
Bạn có thể giải thích rõ hơn 1 chút được không ? mình vẫn không hiểu ? tại sao là làm tròn số ?
x = 1.123 ; y = 1.456;
x + y = 2.579 ( bạn thử cộng lại xem có đúng không ? )
do cách lưu số thập phân dưới dạng nhị phân của máy tính đấy bạn, bạn có thể thử thêm các kiểu số thực như double sẽ thấy nó khác rất nhiều… bạn lên google tìm chuẩn IEEE-754 nhé
xem xong bạn có thể dự đoán so sánh x và y với khai báo như sau
Như các bạn bên trên nói là đúng đó. Do sai số. Bạn thử chạy nhé.