HỎI VUI: Giá trị return của hàm này là gì?

Kết của của hàm này sẽ là gì?

abs(3.*(4./3.-1.)-1.);
2 Likes

Về mặt toán học:

abs(3.*(4./3.-1.)-1.)
= abs(3.*(1./3)-1.)
= abs(3.*(1./3)-1.)
= 0

Tuy nhiên, trong máy tính, 31/3 chưa chắc đã bằng 1 nên abs(31/3-1) là 1 số xấp xỉ 0 nhưng không phải là 0.

Python ra 0.0:

>>> abs(3.*(1./3)-1.)
0.0
1 Like

Câu này hay thật, mình thì thấy rõ nó bằng 0, nhưng js nó ra: 2.220446049250313e-16

Có lẽ là nó tính từng phần:

  Math.abs(3*(4/3-1)-1);
= Math.abs(3*(1.3333333333333333-1)-1);
= Math.abs(3*0.33333333333333326-1);
= Math.abs(0.9999999999999998-1);
= Math.abs(-2.220446049250313e-16);
= 2.220446049250313e-16

Không biết dấu . đằng sau có gây thêm vấn đề gì ở ngôn ngữ lập trình khác hay không. :sweat_smile:

3 Likes

Làm toán với số thực sẽ xảy ra sai số, không ít thì nhiều.
Ở đây kết quả của bạn nếu làm tròn thì cũng ra 0.

2 Likes

Chắc đó của là ý của thớt, về cách tính của máy tính.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?