Toán học trong C# (phần 18)

Lỗi tràn bộ đệm và làm tròn

Trong thế giới toán học, các số có thể trở nên lớn như chúng cần. Về mặt toán học thì, các số nguyên không
giới hạn trên. Nhưng các dạng dữ liệu của chúng ta thì . Một byte không thể trở nên lớn hơn 255, và một
int không thể trình bày số 3 tỷ tỷ. Cái gì xảy ra khi chúng ta vượt qua giới hạn đó?

short a = 30000;
short b = 30000;
short sum = (short)(a + b); // Too big to fit into a short. What happens?

Toán học nói rằng nó nên là 60000, nhưng máy tính cung cấp một giá trị -5536.
Khi một hoạt động làm một giá trị đi vượt quá cái dạng của nó có thể trình bày, nó được gọi là tràn bộ đệm (overflow).
Cho các dạng số nguyên, các này dẫn đến kết quả gói quanh lại phần bắt đầu của phạm vi – 0 cho các dạng không dấu và
một số âm lớn cho các dạng có dấu. Phát biểu khác đi, int.MaxValue + 1 chính xác bằng int.MinValue. Có một nguy cơ
trong đẩy các giới hạn của một dạng dữ liệu: nó có thể dẫn đến các kết quả lạ. Game Pc-Man gốc có vấn đề này khi bạn
đi qua mức 255 (nó phải sử dụng một byte cho mức hiện tại). Game đi tới một mức 0 không xác định, cái là trục trặc
và không bị đánh bại.

Chia sẻ