01/10/2018, 09:56

Đ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
");
    else
        printf("Bye
");
    // Kiểu double
    double b = 0.7;
    if(b == 0.7)
        printf("Hello");
    else
        printf("Bye");
    return 0;
}
Mimo viết 12:08 ngày 01/10/2018

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++

Lê Nhật Thanh viết 12:02 ngày 01/10/2018

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 đó

rogp10 viết 12:09 ngày 01/10/2018

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

Lê Nhật Thanh viết 12:03 ngày 01/10/2018

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ớ.

Nguyen Kien viết 11:57 ngày 01/10/2018

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");
}
Lê Nhật Thanh viết 12:05 ngày 01/10/2018

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

Bài liên quan
0