Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Toán tử cộng với biến double ra kết quả sai , bị lẻ ( gần đúng )

10:08 22-11-2021 70 lượt xem 3 bình luận

Hi AD . 

Cho mình hỏi chút là sao khi cộng các biến double thì kết quả chỉ ra gần đúng vậy . 

Ví dụ như sau : 

a = 10.5

b = 20.4

c = 13.2 

thì kết quả a+b+c = 44.099999999999994. 

Code của mình thì như sau : 

Console.WriteLine(" Cung lam phep cong 3 so nhe : ");
NhapBienSo1:
Console.Write(" xin moi ban nhap bien so 1 = ");
double BienSo1;
isResult = double.TryParse(Console.ReadLine() , out BienSo1);
if (isResult == false)
    Console.WriteLine("Nhap sai dinh dang . Can nhap lai la dinh dang so");
if (isResult == false)
    goto NhapBienSo1;
NhapBienSo2:
Console.Write(" xin moi ban nhap bien so 2 = ");
double BienSo2;
isResult = double.TryParse(Console.ReadLine(), out BienSo2);
if (isResult == false)
Console.WriteLine("Nhap sai dinh dang . Can nhap lai la dinh dang so");
if (isResult == false)
goto NhapBienSo2;
NhapBienSo3:
Console.Write(" xin moi ban nhap bien so 3 = ");
double BienSo3;
isResult = double.TryParse(Console.ReadLine(), out BienSo3);
if (isResult == false)
    Console.WriteLine("Nhap sai dinh dang . Can nhap lai la dinh dang so");
if (isResult == false)
    goto NhapBienSo3;
double KetQua = BienSo1 + BienSo2 + BienSo3;
Console.WriteLine(" a = {0} , b = {1} , c = {2} , a + b + c = {3}", BienSo1, BienSo2, BienSo3, KetQua);
hỗ trợ giải đáp giúp mình với , cảm ơn

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 22:58 22-11-2021
hầu hết ngôn ngữ lập trình đều bị nha bạn. lập trình là gần đúng
...ntt đã bình luận 11:19 22-11-2021

Đây là một lỗi xảy ra ở toàn bộ các ngôn ngữ lập trình

Nó liên quan đến cách lưu trữ các giá trị số thực trong máy tính. Một cách dễ hiểu, máy tính sẽ chuyển các số thực về dạng các chuỗi nhị phân và lưu trữ trong máy tính. Việc chuyển đổi này không thể được thực hiện tối ưu, do đó tạo ra sai số dẫn đến kết quả bị sai :v 

Bạn có thể tham khảo thêm tại: https://en.wikipedia.org/wiki/Round-off_error

thahtram đã bình luận 11:16 22-11-2021

 mình dùng visual studio thì hay để .ToString("c")); để làm tròn kết quả thành 2 chữ số 

Câu hỏi mới nhất