01/10/2018, 11:27
Thắc mắc về vòng for với biến chạy i là kiểu số thực
có thể đây là câu hỏi hơi ngớ ngẩn tí nhưng ko biết có ai thắc mắc về việc dùng vòng for(i) với kiều số thực ko nhỉ?
Bài liên quan
Câu hỏi này hay phết mà, đâu có ngớ ngẩn gì đâu.
1 cách thuần tuý:
Cẩn thận nhất là điều kiện thứ 2 của vòng for.
i != n
có thể dẫn đến lặp vô hạn, kiểu nhưvì rất dễ xảy ra trường hợp
0.1 + 0.2 != 0.3
(99%).Người ta không thể trực tiếp so sánh == khi sử dụng 2 số thực.
Cách so sánh 2 số thực a và b:
So sánh lớn hơn, nhỏ hơn thì so trực tiếp được.
Hi Tungduong Nguyen.
1 Trong đặc tả câu lệnh for của C++ không có chỗ nào quy định kiểu dữ liệu.
2. Vòng for dùng cho trường hợp lặp số lần biết trước nghĩa là biến đếm là kiểu nguyên nên thường dùng với biến nguyên. Nếu cần dùng với biến thực thì tốt nhất nên chuyển sang dùng while.
for của C++ dùng như while được mà, có ai bắt nó gò bó vào là lặp với số lần khỉ m* gì đâu.
mình có test thì thấy rằng khi for số thực thì nó in ra ra số nguyên, mình nghĩ là ko thể dùng for cho số thực dc chứ nhỉ
Bạn thử up code demo mình xem.
Hi HK boy.
Vấn đề không phải là được hay không được. Với goto bạn có thể thay cho tất cả các loại vòng lặp. Tuy nhiên sao người ta vẫn tạo ra for và while ?. Việc chia ra lặp số lần biết trước và không làm code dẽ đọc hơn. Nếu bạn đọc các code mà chỉ số lặp index bị thay đổi trong vong lặp thực sự không dễ để hiểu logic.
Tại cái cout thôi. Nó tự động làm tròn số đấy.
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
#include #include using namespace std; int main() { double a = 1.0000, b = 1.2000, c = 1.2300, d = 1.2340, e = 1.2345, f = 1.23456; cout << a << endl << b << endl << c <<
vậy là for vs số thực là ko thực hiện đc đúng ko
Thực hiện được. Mình có nói là không thực hiện được đâu?
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
#include #include using namespace std; int main() { for (double i = 0.1; i < 1.0; i += 0.1) cout << i << endl; }
à ừ nhỉ, nó có i+=0.1, tại cứ nghĩ số thực có thế là 0.0000…1 nên nhầm, thank bạn nha
Chả lan quyên đến thực hay nguyên gì, vì tính số phẩy động nó phải vậy rồi.
Mà for này có phải for pascal đâu, tùy trường hợp mà chọn for hay while.
Hi rogp10
Bạn nói rõ hơn được không ?
Bạn nói rõ hơn được không ?
Nôm na như thế này:
Vậy cách gì hệ nhị phân (IEEE-754) biểu diễn chính xác được 0.1, 0.2 với cả 0.3 đây.
Hi rogp10.
Mình không nghĩ là nó liên quan đến ý mình.
Mình đang nói chỗ không liên quan đấy đấy =) lôi for và while vào làm gì.
Hi rogp10.
Ý mình khi lặp số làn đếm được (biến đếm kiểu nguyên) thì dùng for còn không biết trước số lần thì dùng while (điều kiện thực)
có số lần đếm được hay không đếm được hả bạn?
HI HK boy.
Không bạn ạ. i += 0.000001; Giữa hai số thực bất kỳ có vô số số thực nên đó là lý do máy tính làm tròn về gấn đúng nên khi so sánh hai số thực đôi khi gây lỗi. Với số nguyên thì không.
Như thế vẫn là đếm được.