2012-03-11 29 views
16

tôi chuyển đổi độ sang radian (độ * Math.PI/180) nhưng tại sao sau:Tại sao Math.cos (90 * Math.PI/180) mang lại hiệu suất 6.123031769111 ... và không phải là 0?

Math.cos(90 * Math.PI/180) 

năng suất 6,123031769111 ... và không bằng không?

Tôi đang cố gắng thực hiện xoay 2D sử dụng ma trận và kết quả hoàn toàn nằm ngoài khoảng trống.

+2

Bạn nên hiển thị thêm mã để chúng tôi có thể thấy một số ngữ cảnh. – Gabe

+2

@ Gabe- Thực ra, mã trên là đủ. Hãy thử gõ nó vào một giao diện điều khiển JS và bạn thực sự sẽ nhận được kết quả được hiển thị ở trên. – templatetypedef

Trả lời

33

Kết quả của

Math.cos(90 * Math.PI/180) 

6.123031769111886e-17 

Thông báo các e-17 ở cuối, điều đó có nghĩa rằng con số này là 6,123 x 10 -17. Đây là một con số gần như biến mất gần 0 rằng nó có hiệu quả 0. Lý do mà nó không giống hệt 0 là do làm tròn lỗi trong định dạng kép IEEE-754 ngăn cản bạn biểu diễn chính xác π/2 và gây ra lỗi làm tròn phút trong tính toán của cosin.

Nhân tiện - tôi cũng khá ngạc nhiên khi kết quả trở lại bắt đầu với số 6! Chỉ sau khi tôi nhìn vào cuối cùng mọi thứ bắt đầu có ý nghĩa.

Hy vọng điều này sẽ hữu ích!

+6

và thực tế là 'Math.PI! = Π'. –

+3

+1. Có lẽ thêm một cái gì đó như 'Math.cos (90 * Math.PI/180) .toFixed (15)' như là một giải pháp đơn giản? –

+0

'' (Math.cos (90 * Math.PI/180) | 0) === 0'' – JCM

2

6.123233995736766e-17 rất gần với số không. Chỉ cần làm tròn số.

3
6.123233995736766e-17 

là ký hiệu khoa học cho một số rất nhỏ, gần bằng không. Nó không chính xác bằng không vì lỗi làm tròn và vân vân.

Các vấn đề liên quan