2015-10-27 16 views
6

Tôi sử dụng Meteor. Nó sử dụng Javascript trên cả máy chủ và máy khách.Math.sin() cho kết quả khác nhau trên máy chủ/máy khách?

Khi tôi chạy Math.sin(356644061314425) * 10000 tôi nhận được:

-9986.46139381927 trên máy chủ và

-9986.46115497749 trên máy khách/trình duyệt/app

Tại sao điều này? Làm thế nào tôi có thể ngăn chặn điều này?

EDIT: Các câu hỏi trùng lặp được đề xuất đề cập đến độ/radian. Tôi nghĩ rằng tôi là một vấn đề thời gian chạy.

+0

Đặt để hiển thị 3 chữ số thập phân;) –

+0

có thể sử dụng phao nổi. Bạn biết đấy, phao không chính xác tại một số điểm. –

+0

Có thể trùng lặp của [Toán bất thường với kết quả không chính xác?] (Http://stackoverflow.com/questions/8691800/unusual-math-with-incorrect-results) –

Trả lời

6

Tôi nghĩ câu trả lời cho "Làm cách nào để ngăn chặn điều này?" là "bạn không thể".

Câu trả lời cho "Tại sao điều này?" là việc triển khai javascript của Math.sin không được xác định.

Xem http://www.ecma-international.org/ecma-262/5.1/#sec-15.8.2.16

Cụ "sin (x) Trả về một thực hiện phụ thuộc vào xấp xỉ với sin của x. Đối số được biểu diễn bằng radian." (chữ nghiêng của tôi).

Nhưng thử nghiệm của tôi cho thấy các trình duyệt hiện đại hiện chỉ sử dụng một trong hai triển khai, với Chrome khác với (và dường như chính xác hơn) các trình duyệt khác.

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