01/10/2018, 14:47

[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.);
HK boy viết 16:53 ngày 01/10/2018

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
null viết 16:58 ngày 01/10/2018

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.

Dark.Hades viết 16:59 ngày 01/10/2018

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.

null viết 16:51 ngày 01/10/2018

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

Bài liên quan
0