Đoạn code C++ về kiểu dữ liệu

Hi mọi người, mình có đoạn code sau, Bạn nào có thể giải thích giúp mình được không?
Kết quả in ra là:
Bye
Hello

#include <stdio.h>

int main()
{
    // Kiểu float
    float a = 0.7;
    if(a == 0.7)
        printf("Hello\n");
    else
        printf("Bye\n");
    // Kiểu double
    double b = 0.7;
    if(b == 0.7)
        printf("Hello");
    else
        printf("Bye");
    return 0;
}

float chỉ đúng dạng mức độ đơn => khi so sánh 2 số float , nó sẽ sai lúc này sẽ là 0.6999999 mà ko phải là 0.7
double đúng mạng mức độ kép => khi so sánh nó sẽ đúng chính xác 0.7
mà code này là C bạn nhé , ko phải C++

Hi bạn,
Mình cũng biết là float có độ chính xác đơn, còn double có độ chính xác kép, nhưng không hiểu đơn với kép nó như thế nào? Phải chăng là cách nó lưu các giá trị nhị phân trong bộ nhớ.
Code trên là C nhưng mình viết trên file CPP vẫn được bạn, vì C++ bao hàm luôn C trong đó :slight_smile:

Từ khóa là IEEE-754 :smiley: và dù gì thì đây vẫn là code C.

1 Like

Thanks 2 bạn nhiều nhé. Mình đi coi lại cái vụ lưu các giá trị chấm động trong bộ nhớ. :slight_smile:

khi so sánh hai số thức có bằng nhau hay không mình thường làm thế này:

#define E 0.0001

float a = 0.5;
float b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1;

if(fabs(a - b) < E){
      printf("\n equal");
}
1 Like

Thanks bạn. Bạn đưa ra một cái rất hay đó!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?