30/09/2018, 19:17

Sai số khi tính toán

Chào cac bạn,

Các bạn giúp mình vấn đề này với

Mình gặp vấn đề về số thập phân giữa MATLAB và C++. Công thức số đã nhập thì đúng rồi, nhưng kết quả lại chạy khác

Dưới đây là vấn đề mình đang gặp:

Mong các bạn đưa ra hướng giải quyết giúp mình

viết 21:28 ngày 30/09/2018

2 dòng result giống nhau hết mà? Sai ở chỗ result[3] = 0 à? Cái công thức ở dưới xài v0 có thấy v0 ở đâu đâu

Tô Quang Tịnh viết 21:19 ngày 30/09/2018

À.
Mình thấy rồi. Cám ơn Trí thật nhiều nha.
Hôm qua khuya buồn ngủ quá gõ lộn

Công thức của mình như thế này:

result[0] = v[1]*meanZ - v[2]*meanY;
result[1] = v[2]*meanX - v[0]*meanZ;
result[2] = v[0]*meanY - v[1]*meanX;

Hóa ra là giống nhau. ^^’

Còn 1 vấn đề mình thắc mắc:
Khi mình tính trên MATLAB thì kết quả là:
Còn khi mình tính trên C++ thì kết quả là:

Tại sao khi gần giống kết quả mà cách hiển thị lên màn hình lại khác nhau vậy bạn, như vậy nó có ảnh hưởng gì đến tính toán của mình không?

viết 21:27 ngày 30/09/2018

sai số nhỏ quá thì ko ảnh hưởng gì nhiều đâu. Số thực kiểu double thì có độ chính xác tới 15-16 chữ số, như vậy sai số còn bé hơn 1 phần triệu tỷ của số đó, ví dụ 1016 (10 triệu tỷ) và (1016 - 1) thì sai số là 1 đơn vị, nhưng so với 10 triệu tỷ thì 1 chả là gì cả. Chỉ khi xài float thì độ chính xác chỉ có tầm 7.22 số, như vậy có thể sai số 1 phần 100 triệu có thể có vấn đề nếu bị dồn, gọi là local truncation error: sai số của 1 iteration có thể dồn lại thành sai số lớn. Cái này xài float thì gặp rất nhiều, xài double thì ít gặp hơn. Code của bạn xài double chắc ko gặp vấn đề này.

về độ chinh xác của số thực thì wiki có đây: https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

Tô Quang Tịnh viết 21:19 ngày 30/09/2018

Ok. Mình hiểu rồi.
Cám ơn bạn thật nhiều nha.
Làm mình đau đầu suốt mấy ngày nay.

Bài liên quan
0