Double là gì trong C

Việt Cuponi 70 đã đăng:

Mình thử chia một phép tính sử dụng hai kiểu dữ liệu float và double 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?

c/c++ lập trình kiểu dữ liệu
Bỏ theo dõi
  • Theo dõi bài viết qua tin nhắn
  • Theo dõi bài viết qua email
  • Bỏ theo dõi
Việt Cuponi
đã hỏi 3.3 năm trước bởi
Việt Cuponi 70
thêm bình luận...
xuans2huy 490 đã đă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 #include 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
xuans2huy
đã đăng 3.3 năm trước bởi
Double là gì trong C
xuans2huy 490

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

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

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

Member3491
đã đăng 3.3 năm trước bởi
Member3491 0

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 Việt Cuponi 07.10.2018
thêm bình luận...