2012-05-24 34 views
6

Có phải họ đã tìm ra bằng cách sử dụng phương pháp tiếp cận vũ lực hoặc có thuật toán để làm như vậy không?Lập trình logarit được lập trình như thế nào?

+3

'lực lượng vũ phu' và 'thuật toán' không loại trừ lẫn nhau, câu hỏi của bạn đặt ra sự phân đôi sai. Và câu trả lời là, CÓ, có một thuật toán để làm như vậy. –

+0

Ah, tôi cảm thấy ngớ ngẩn khi quên rằng lực lượng vũ phu thực sự là một thuật toán. Cảm ơn. – Taffer

+0

"brute force" là một thuộc tính của các thuật toán, nơi bạn áp dụng nhiều sức mạnh tính toán hơn để tránh xa suy nghĩ (mà bạn có thể đã sử dụng để tìm một thuật toán ít tàn bạo hơn). – starblue

Trả lời

14

Việc thực hiện một hàm như lôgarit tự nhiên trong bất kỳ thư viện toán học nào sẽ giữ lỗi dưới một ulp (đơn vị độ chính xác thấp nhất). Mục tiêu của người triển khai hàm chức năng toán học là tìm một số phép tính xấp xỉ tối ưu, một phép tính đạt được độ chính xác mong muốn với ít tính toán nhất có thể. Chuỗi Taylor thường là một lựa chọn không tốt vì cần quá nhiều thuật ngữ để đạt được độ chính xác mong muốn. Các loại vũ khí điển hình của sự lựa chọn là giảm phạm vi từ tất cả các số thực thể hiện sang một số khu vực rất nhỏ, và sau đó sử dụng một số xấp xỉ tối ưu cho phép xấp xỉ chính xác hàm mong muốn trong phạm vi hẹp này. Các vũ khí điển hình của sự lựa chọn cho xấp xỉ tối ưu này là một đa thức hoặc đa thức hợp lý (tỷ lệ của hai đa thức). Việc thực hiện chỉ chứa các hệ số đa thức. Những hệ số này được xây dựng bởi một số kỹ thuật tối ưu hóa như thuật toán Remes Exchange.

Trong trường hợp logarit tự nhiên, có một cách dễ dàng để giảm phạm vi. số thực hầu hết đều thể hiện trong điều khoản của một mantissa và số mũ: x = m * 2 p, nơi p là một số nguyên và m là giữa 1 và 2. Như vậy log (x ) = log ( m) + p * log (2). Thuật ngữ thứ hai, p * log (2), chỉ là phép nhân với hằng số đã biết. Do đó, vấn đề làm giảm việc tìm logarit của một số từ 1 đến 2 (hoặc giữa 1/2 và 1). Việc giảm phạm vi tiếp theo có thể được thực hiện bằng cách sử dụng thực tế rằng √2 là lôgarit ở giữa [1,2]. Vì vậy tất cả những gì cần thiết là một cách để tính logarit của một số từ 1 đến √2. Điều này thường được thực hiện với một đa thức hợp lý. Tỷ lệ đa thức bậc hai đa thức với thứ tự thứ ba hoạt động khá độc đáo cho điều này.

+4

.5 ULP là một mục tiêu đầy tham vọng; nó giống như được làm tròn một cách chính xác, có nghĩa là số biểu diễn gần nhất kết quả chính xác toán học phải được trả về. Dự án CRlibm (http://lipforge.ens-lyon.fr/www/crlibm/) tìm cách làm điều này, nhưng nó không đầy đủ (ví dụ, các hàm hyperbol nghịch đảo không được cung cấp). Vòng tròn trung thành (ít hơn 1 ULP) là một mục tiêu đạt được nhiều hơn, và các thư viện điển hình cho phép các lỗi của một số ULP. Các hàm hợp lý được tránh vì phân chia chậm trên các bộ xử lý thông thường. Ví dụ, một tiếp tuyến có thể sử dụng một hàm hợp lý, nhưng sin và logarit sẽ sử dụng đa thức đơn giản. –

+0

Nhận xét hay. 0.5 ULP quá tham vọng.Về các đa thức hợp lý so với các đa thức đơn giản: các lý do hợp lý có thể tốt hơn nếu giảm mức độ nhiều hơn bù đắp chi phí tăng của một bộ phận so với phép nhân. Tôi đã tìm thấy nhiều triển khai 'log' sử dụng đa thức hợp lý. Nhật ký là một hàm rất đẹp như xa như xấp xỉ. Các trường hợp xấu nhất xảy ra với các con số gần thống nhất, và thậm chí ở đây lỗi có thể được giữ trong một ULP. –

+1

Giảm phạm vi xuống [1.0, 2.0) tạo ra các lỗi lớn gần log (0.999 ...), như David Hammen đã nhận xét. Việc triển khai tôi biết tránh vấn đề này bằng cách giảm xuống một phạm vi có 1.0 ở bên trong, như [2/3, 4/3) hoặc [sqrt (0.5), sqrt (2.0)). Trong thuật ngữ lập trình, nó chỉ là một vài hướng dẫn thêm để làm điều này: nếu (m> hằng số) {p + = 1; m * = 0,5;} –

2

Có một số cách để tính logarit. Xem this.

+5

-1. Chúng không phải là "hầu hết được tính toán bởi các chuỗi xấp xỉ Taylor". –

+0

Tôi đã cập nhật câu trả lời để không nói điều đó nữa. – Oleksi

+1

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18788146) – Syfer

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