2
Sự khác nhau giữa kiểu dữ liệu float và double trong C/C++ là gì?
1
Việt Cuponi70 đã đăng:

Mình thử chia một phép tính sử dụng hai kiểu dữ liệu floatdouble như sau:

float a = 8.0 / 3.0;
double b = 8.0 / 3.0;
cout << a << endl; // = 2.66667
cout << b << endl; // = 2.66667

Kết quả trả về là như nhau, vậy có sự khác nhau gì giữa float hoặc double hay không, nếu kết quả là như nhau tại sao lại dùng thêm double trong khi chỉ cần một trong hai?

thêm bình luận...
2
xuans2huy510 đã đăng:

float với double là hai kiểu dữ liệu hoàn toàn khác nhau, sự khác nhau ở đây chính là số bits được dùng để biểu diễn và miền giá trị của chúng.

float

Số bits biểu diễn: 32

Miền giá trị: 1.17549e-38 ~ 3.40282e+38

double

Số bits biểu diễn: 64 bits

Miền giá trị: 2.22507e-308 ~ 1.79769e+308

Kiểu dữ liệu double dùng tới 64 bits để biểu diễn nên miền giá trị của nó rộng hơn gấp nhiều lần so với float, con số ở trên còn phụ thuộc vào từng hệ điều hành cụ thể, nếu bạn sử dụng máy tính lâu đời, có thể sẽ khác đôi chút.

Kiểm tra bằng cách chạy chương trình sau:

#include <iostream>
#include <limits>
using namespace std;

int main(){
    /* Xuất ra số bits biểu diễn kiểu dữ liệu float và double: 1 byte = 8 bits */
    cout << "So bits bieu dien float: " << sizeof(float) * 8 << " bits" << endl; // = 32 bits
    cout << "So bits bieu dien double: " << sizeof(double) * 8 << " bits" << endl; // = 64 bits

    /* Miền giá trị của kiểu dữ liệu float */
    cout <<"Gia tri nho nhat cua float la: " << FLT_MIN << endl;
    cout <<"Gia tri lon nhat cua float la: " << FLT_MAX << endl;

    /* Miền giá trị của kiểu dữ liệu double */
    cout <<"Gia tri nho nhat cua double la: " << DBL_MIN << endl;
    cout <<"Gia tri lon nhat cua double la: " << DBL_MAX << endl;

    return 0;
}

Kết quả của phép chia ở đoạn code bạn chạy thử nghiệm là như nhau bởi vì nó đã được rút gọn chỉ còn lại độ chính xác 5 chữ số, nếu bạn dùng hàm precision() để mở rộng độ chính xác, khi đó kết quả sẽ khác biệt, kiểu dữ liệu double sẽ cho kết quả chính xác hơn.

// Mở rộng độ chính xác đến 40 chữ số.
cout.precision(40);

float a = 8.0 / 3.0;
double b = 8.0 / 3.0;
cout << a << endl; // = 2.66666674613952640000
cout << b << endl; // = 2.66666666666666650000

Rất chi tiết và đầy đủ, cảm ơn bạn rất nhiều.

Việt Cuponi 08.10.2018
thêm bình luận...
0
Member34910 đã đăng:

Miền giá trị của double rộng hơn float

Bạn có thể mô tả bằng mã nguồn không, bởi khi mình xuất hai giá trị ra màn hình, kết quả đều như nhau.

Việt Cuponi 07.10.2018
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)