1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> int main() { int i = 0; for (float x = 100000001.0f; x <= 100000010.0f; x += 1.0f) { i++; std::cout << i << std::endl; } return 0; } |

TẠI SAO VẬY ???
Giải thích
Hầu hết các C++ compiler đều tuân theo IEEE 754 để biểu diễn số thực theo kiểu float hoặc double. Trong đó kiểu float có độ chính xác đơn, sử dụng 32 bits để biểu diễn giá trị.- 1 bit dấu (Sign)
- 8 bits biểu diễn giá trị mũ (Exponent)
- 23 bits biểu diễn giá trị phần lẻ sau chuyển đổi (Mantisa)

- 100000001.0f khi gán vào biến x thì giá trị thực của x sẽ là 100000000.0
- khi cộng thêm 1.0f vào x thì giá trị thực của x vẫn là 100000000.0
- 100000010.0f biểu diễn dưới dạng float thì giá trị thực là 100000008.0
Nếu chương trình trên viết lại sử dụng kiểu double thì nó sẽ chạy bình thường →
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> int main() { int i = 0; for (double x = 100000001.0; x <= 100000010.0; x += 1.0) { i++; std::cout << i << std::endl; } return 0; } |
1 2 3 4 5 6 7 8 9 10 |
1 2 3 4 5 6 7 8 9 10 |
Tham khảo thêm
— Phạm Minh Tuấn (Shun) —
