2011-10-23 30 views
7

Có cách nào để tính toán gốc thứ n của double trong mục tiêu-c không?Tính toán gốc thứ n?

Tôi dường như không thể tìm thấy chức năng phù hợp.

Trả lời

15

Bạn phải sử dụng chức năng pow:

pow(d, 1.0/n) 

enter image description here

+3

Nó có thể là khôn ngoan để sử dụng một phao rõ ràng ở đây 'pow (d, 1,0/n) ', vì nếu không nó sẽ không làm việc với n là một số nguyên. – joerick

+1

quan sát tốt – fceruti

+0

Điều này sẽ không hoạt động đối với các số lẻ (ví dụ: khối) và giá trị âm - xem câu trả lời của tôi bên dưới. –

3

Về mặt toán học, gốc thứ n của x là x với lũy thừa là 1/n.

Tôi không biết cú pháp của mục tiêu-c sẽ là gì, nhưng về cơ bản bạn chỉ muốn sử dụng chức năng nguồn với 1/n làm số mũ.

1

Đối với rễ đánh số lẻ (ví dụ như khối) và số âm, kết quả của gốc đang được xác định rõ và tiêu cực, nhưng chỉ sử dụng pow(value, 1.0/n) sẽ không hoạt động (bạn lấy lại 'NaN' - không phải là số).

Vì vậy, sử dụng này để thay thế:

int f = (value < 0 && (n % 2 == 1)) ? -1 : 1; 
root = pow(value * f, 1.0/n) * f 
Các vấn đề liên quan