2009-09-03 15 views
6

Tôi có một ứng dụng cần nâng một số lên một sức mạnh phân đoạn. Nền tảng mục tiêu là một FPGA và tôi có thể nhận được ước tính về kích thước FPU cho nó, nhưng tôi cần một thuật toán để nâng một số lên một sức mạnh phân đoạn chỉ cho một nghiên cứu khả thi. Tôi cho rằng điểm nổi là trường hợp xấu nhất, tôi hy vọng trong thực tế chúng ta sẽ có thể sử dụng các vết cắt ngắn, nhưng bây giờ tôi muốn cho thấy trường hợp xấu nhất có thể được thực hiện trên phần của chúng tôi.Làm thế nào để tính toán một quyền lực tùy ý/gốc?

Tôi nghĩ rằng tôi nên hỏi ở đây và xem có phương pháp phổ biến nào mà tôi có thể kiểm tra hay không. Tôi biết có những phương pháp phần mềm để làm điều này, tôi muốn chỉ là một thuật toán hợp lý hiệu quả để bắt đầu. Tôi sẽ lo lắng về việc thực hiện FPGA.

Trả lời

7

Phạm vi đầu vào của bạn có tùy ý hoặc được biết đến trong một phạm vi nhất định không?

trong cả hai trường hợp, x m = exp (m log x), vì vậy nếu bạn có thể tạo hàm để đánh giá exp (x) và log (x) và có nhân, có thể bạn đã đặt xong.

Bạn sẽ phải tìm ra cách bạn muốn xử lý các giá trị không phụ thuộc của x.

(gợi ý cho log (x): nếu đây là IEEE-754 floating point, chuyển significand nếu cần thiết cho đến khi bạn kết thúc với một loạt các con số giữa 2 k và 2 k + 1 đối với một số giá trị K. Điều này cho phép bạn đối phó với một phạm vi 2: 1 mà không phải là quá khó để gần đúng với đa thức.Sau đó, bạn chỉ có một số lượng nhỏ các khả năng để xử lý cho số mũ và số ca.

Gợi ý tương ứng cho exp (x): viết x = k + b trong đó 0 < = b < 1 và k là số nguyên, sau đó exp (x) = exp (k) * exp (b); b có giới hạn phạm vi và k có một số khả năng rời rạc hạn chế.)

(gợi ý # 2: những con số lẽ ra tốt hơn cho x m = g (mf (x)) trong đó f (x) = log x và g (x) = 2 x.)

+0

Tôi giả định tùy ý bây giờ, tôi phải đọc thêm một số lý thuyết của hệ thống đằng sau phép tính đang thực hiện. Ngay bây giờ chỉ là cố gắng đề xuất một giải pháp cho khách hàng. Tôi chỉ muốn phân tích chứng minh rằng nó có thể được thực hiện trên hệ thống của chúng tôi. – NoMoreZealots

+0

+1. Tôi đã làm việc trên một thời gian chạy kỳ lạ một trong khi trở lại mà thiếu một thư viện FP đầy đủ nhưng cung cấp frexp/ldexp thói quen để tách và tái kết hợp số mũ và mantissa; từ đó, việc xây dựng các hàm FP chuẩn là khá đơn giản. –

+0

Thực ra đối với một trường hợp cụ thể, có vẻ như số mũ sẽ là> 1. Tôi không chắc chắn là đúng cho mọi trường hợp. – NoMoreZealots

5

Như Jason S đã nói, điều này được thực hiện bằng cách sử dụng nhận dạng x m = exp (m log x). Trong thực tế, mặc dù, bạn sẽ phải đối phó với các lỗi cắt ngắn. Tôi nghĩ rằng cách này thường được thực hiện là

  1. Sử dụng danh tính này: x m = (2 n * x/2 n) m = 2 nm * (x/2 n) m và tìm thấy một số nguyên n sao cho 1 < = x/2 n < 2.
  2. Tính t = log2 (x/2 n). Điều này có thể được thực hiện bằng cách sử dụng một mức độ mở rộng Taylor đủ cao, hoặc với ol tốt 'Newton-Raphson. Bạn phải đảm bảo rằng lỗi tối đa trong khoảng thời gian [1, 2 [không quá lớn đối với bạn.
  3. Tính u = nm + tm.
  4. Mục tiêu của chúng tôi bây giờ là tính toán 2 u.Sử dụng thực tế là 2 u = 2 v * 2 uv và tìm thấy một số nguyên v sao cho 0 < = uv < 1.
  5. Tính w = 2 uv, một lần nữa sử dụng bạn của chúng tôi Taylor hoặc Newton -Raphson. Khoảng thời gian quan tâm là 0 < = u-v < 1.
  6. Câu trả lời của bạn bây giờ là 2 v * w.
+0

Làm thế nào để bạn sử dụng hàm newton raphson để tính hàm log? Tôi có thể tìm thấy algo divison bằng cách sử dụng nó, nhưng có quá nhiều "tiếng ồn" trên google để tìm cách calc đăng nhập bằng cách sử dụng nó. – NoMoreZealots

+0

Tôi nghĩ rằng tôi nhớ từ lý thuyết tính toán của mình là có thể, nhưng tôi có thể sai. Tôi không phải là nhà toán học. – erikkallen

+0

Cùng bạn sử dụng nó để tính toán bất kỳ chức năng nào - về cơ bản nó là một bộ giải số cho f (x) = 0, được cho một cặp điểm bắt đầu x1, x2 và đảm bảo rằng giải pháp nằm giữa. – qdot

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