Trong khi xem xét việc triển khai hàm của một lập trình viên khác để tính toán CDF phân phối bình thường , tôi đã đưa ra một đề nghị thay thế toàn bộ việc thực hiện bằng các hàm dựng sẵn của Python hoặc sử dụng SciPy, một thư viện khoa học phổ biến.
Lập trình viên khác chỉ ra rằng không phải math.erfc()
và cũng không scipy.stats.norm.cdf()
cung cấp bất kỳ đảm bảo độ chính xác trong tài liệu hướng dẫn của họ. Do đó, tôi nên thận trọng hơn trong việc thay thế một thuật toán gần đúng (được lấy từ một nguồn được tôn trọng và có giới hạn lỗi được ghi lại ).
Thành thật mà nói, ý nghĩ nghi ngờ tính chính xác và chính xác của chức năng thư viện hoặc tích hợp chưa bao giờ xuất hiện trong đầu tôi. Rốt cuộc, tôi đã gọi các chức năng như sin()
và sqrt()
trong nhiều năm mà không cần suy nghĩ nhiều - tại sao nên math.erf()
hay scipy.stats.norm.cdf()
khác biệt?
Nhưng bây giờ, tôi quan tâm. Câu hỏi của tôi là:
- Nói chung, nếu tài liệu không đề cập đặc biệt, thì nó có ngụ ý rằng các loại hàm này hoàn toàn chính xác đến vị trí thập phân cuối cùng, trong độ chính xác được cung cấp bởi dấu phẩy động chính xác kép của IEEE không?
- Điều đó có đúng với Python
math.erf()
hay SciPyscipy.stats.norm.cdf()
nói riêng không? Làm thế nào bạn có thể nói? Đây man page
sin()
nói ...Các hàm này có thể mất độ chính xác khi đối số của chúng gần bội số pi hoặc khác xa 0,0.
Tại sao phải cẩn thận như vậy tồn tại, khi chức năng sin là định kỳ và đối xứng? Dường như có một gánh nặng đặt lên người gọi để chuẩn hóa đầu vào để có được độ chính xác tối ưu.
Mặt khác, tài liệu của Mozilla
Math.sin()
không nói gì về độ chính xác hay độ chính xác. Điều đó có nghĩa là nó hoàn toàn chính xác hay là "kiến thức phổ biến"Math.sin()
sẽ chỉ chính xác trong một số trường hợp nhất định trong JavaScript, như mọi nơi khác?