30/09/2018, 19:12
Hỏi về chữ số thập phân trong biến kiểu double trong C++
Chào các bạn,
Nhờ các bạn giải đáp giúp mình về một số vấn đề:
Khi thực hiện phép toán (+, -, *, /) giữa hai số biến kiểu double với nhau:
- Biến kết quả xuất ra nó sẽ xuất ra mặc định bao nhiêu chữ số thập phân? Nếu kết quả trong C++ bị làm tròn thì làm cách nào để kéo dài hết phần thập phân kiểu double trong C++ vậy?
Ví dụ:
double a = 3.141592653589793; // 15 chữ số thập phân
double b = 9.8067; // 4 chữ số thập phân
double c = a*b;
- Khi mình thực hiện phép tính trên số liệu lớn, dường như kết quả cuối cùng lệch hẳn so với kết quả trên ngôn ngữ khác như MATLAB (lệch cũng lớn, có khi 0.02 thậm chí là 2). Vì trong bài toán mình làm là lấy kết quả của bước trước để tính ra kết quả của bước sau, làm vậy cũng khoảng 6 - 7 bước phép tính, dẫn đến bị sai số. Vậy có cách nào để chỉnh lại sai số trong C++ cho gần giống MATLAB được không?
Thuật toán mình kiểm tra kỹ lại chạy đúng, ép kiểu không sót chỗ nào.
Cám ơn các bạn nhiều.
Bài liên quan
Câu này chỉ có học Phương pháp tính thì may ra
Theo mình biết thì c++ cho phép xuất ra mặc định 6 chữ số sau dấu chấm phẩy, còn để thay đổi độ chính xác thì bạn dùng hàm setprecision trong thư viện iomanip.
Sai số trong c++ theo mình biết thì là do sự khác biệt giữa hai hệ nhị phân và thập phân do đó khi tính toán qua nhiều phép tính sai số sẽ càng lớn. Còn cách khắc phục thì mình bó tay. :))