01/10/2018, 11:39

Lỗi chạy chương trình so sánh số thực

#include <stdio.h>

int main()
{
    float diem=3.6;
  
    if (diem==3.6) printf("Xuat sac");
   
    return 0;
}

bạn nào cho mình hỏi như thế nào lại không in ra gì là sai chỗ nào nhỉ ??

HK boy viết 13:50 ngày 01/10/2018

Không nên so sánh trực tiếp số thực.

P/s: Lần sau thêm tag, category đầy đủ, đề title rõ ràng. Không cần phải thêm [...] vào trước câu hỏi.

Nam Phan viết 13:43 ngày 01/10/2018

thế nên so sánh như thế nào nhỉ ? mình không biết bạn chỉ mình hộ đc ko

HK boy viết 13:45 ngày 01/10/2018
bool eq(float a, float b) {
    return abs(a - b) < eps; // nếu hiệu của a và b nhỏ hơn 1 số rất bé
                             // thì coi như chúng bằng nhau.
                             // Nên đặt eps = 1e-9.
}
Nam Phan viết 13:52 ngày 01/10/2018

mình so sánh với 2.5 3.5 thì được nhưng 2.4 hay 2.6 ,… thì không được. tại sao vậy nhỉ ?

HK boy viết 13:50 ngày 01/10/2018

Do số thực có sai số, nên không nên/được so sánh trực tiếp 2 số thực.

Nam Phan viết 13:55 ngày 01/10/2018

eq(a,b) trả về =0 là bằng nhau thế như thế nào thì lớn hơn thế nào là nhỏ hơn nhỉ ?

HK boy viết 13:50 ngày 01/10/2018
(a > b) -> (a - b) > eps
(a < b) -> (b - a) > eps
rogp10 viết 13:53 ngày 01/10/2018

3.6 != 3.6f. https://ideone.com/9iIOxW

mình so sánh với 2.5 3.5 thì được nhưng 2.4 hay 2.6 ,… thì không được. tại sao vậy nhỉ ?

0.5 == 0.5f rồi, lí do là vì đằng nào chả viết là 0.1b (binary).

p/s: đọc thêm: http://diendan.congdongcviet.com/threads/t396988::lieu-co-phai-compiler-bi-loi-so-sanh.cpp?p=905876#post905876

Bài liên quan
0