Vì vậy, tôi có một chức năng mà trông giống như sau:Có thể cout thay đổi biến bằng cách nào đó không?
float function(){
float x = SomeValue;
return x/SomeOtherValue;
}
Tại một số điểm, chức năng này tràn và trả về một giá trị tiêu cực thực sự lớn. Để thử và theo dõi chính xác nơi xảy ra sự cố này, tôi đã thêm tuyên bố cout để chức năng trông như sau:
float function(){
float x = SomeValue;
cout << x;
return x/SomeOtherValue;
}
và đã hoạt động! Tất nhiên, tôi đã giải quyết vấn đề hoàn toàn bằng cách sử dụng một đôi. Nhưng tôi tò mò là lý do tại sao chức năng này hoạt động đúng khi tôi couted nó. Đây có phải là điển hình, hoặc có thể có một lỗi ở một nơi khác mà tôi đang thiếu?
(Nếu đó là bất kỳ sự giúp đỡ, giá trị được lưu trữ trong các phao chỉ là một giá trị số nguyên, và không phải là một đặc biệt lớn. Tôi chỉ cần đặt nó trong một phao để tránh đúc.)
Ngoài ra còn có một lưu ý GCC cho việc này tại http://gcc.gnu.org/wiki/x87note Do hành vi tuyệt vời này, so sánh các tính toán điểm động cũng bị hỏng, trừ khi sử dụng các giá trị được tính trước. – hazzen