Các mã sau trong C# (Net 3.5 SP1) là một vòng lặp vô hạn trên máy tính của tôi:C# nổi vòng lặp vô hạn
for (float i = 0; i < float.MaxValue; i++) ;
Nó vượt quá số lượng 16.777.216,0 và 16.777.216,0 + 1 là đánh giá để 16.777.216,0. Tuy nhiên, vào thời điểm này: i + 1! = I.
Đây là một số sự điên rồ.
Tôi nhận thấy có một số điểm không chính xác về cách lưu số điểm nổi. Và tôi đã đọc rằng số nguyên lớn hơn 2^24 không thể được lưu trữ đúng như một phao.
Vẫn là mã ở trên, phải hợp lệ trong C# ngay cả khi số không thể được biểu diễn đúng.
Tại sao nó không hoạt động?
Bạn có thể nhận được điều tương tự xảy ra cho gấp đôi nhưng phải mất một thời gian rất dài. 9007199254740992.0 là giới hạn cho gấp đôi.
Tại sao bạn sử dụng loại dấu phẩy động cho chỉ mục ở vị trí đầu tiên? – John
Tôi đồng ý rằng nó không phải là mã tốt, nhưng nó không phải là mã đúng? Về mặt kỹ thuật, bất kỳ số nào cộng với một số phải lớn hơn chính nó trừ khi có tràn. – jonathanpeppers
Không nhất thiết. Bạn sẽ lưu ý rằng '16777216.0' là phao chính xác đơn gần nhất với '16777217.0' –