Có thư viện C++ nào có thể lấy gốc thứ n của các số lớn (số không thể phù hợp trong một số unsigned long long
) không?Làm thế nào để có được gốc thứ n của các số lớn trong C++?
Trả lời
Bạn có thể sử dụng GMP, thư viện toán học chính xác tùy ý mã nguồn mở phổ biến. Nó có C++ bindings.
Nếu bạn muốn mã này cho mình, hãy kiểm tra các trang Wikipedia trên rễ thứ n:
http://en.wikipedia.org/wiki/Nth_root
Các thuật toán lặp là khá đơn giản:
Gốc thứ n của một số A có thể được tính toán bởi thuật toán gốc thứ n, một trường hợp đặc biệt của phương pháp Newton. Bắt đầu với một đoán ban đầu x (0) và sau đó lặp lại bằng cách sử dụng mối quan hệ lặp lại
x(k+1) = [(n - 1) * x(k) + A/x(k)^(n - 1)]/n
Dừng khi bạn đã hội tụ với độ chính xác mong muốn.
Tùy thuộc vào mức độ lớn hơn 2^64 bạn muốn, tôi đoán vậy. Chỉ cần sử dụng tăng gấp đôi là tốt cho khoảng 1 phần trong 10^9. Tôi đã viết một chương trình thử nghiệm trong C:
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
unsigned long long x;
double dx;
int i;
//make x the max possible value
x = ~0ULL;
dx = (double)x;
printf("Starting with dx = %f\n", dx);
//print the 2th to 20th roots
for (i = 2; i < 21; i++)
{
printf("%dth root %.15f\n", i, pow(dx, 1.0/i));
}
return 0;
}
mà sản xuất đầu ra sau đây:
Starting with dx = 18446744073709551616.000000
2th root 4294967296.000000000000000
3th root 2642245.949629130773246
4th root 65536.000000000000000
5th root 7131.550214521852467
6th root 1625.498677215435691
7th root 565.293831000991759
8th root 256.000000000000000
9th root 138.247646578215154
10th root 84.448506289465257
11th root 56.421840319745364
12th root 40.317473596635935
13th root 30.338480458853493
14th root 23.775908626191171
15th root 19.248400577313866
16th root 16.000000000000000
17th root 13.592188707483222
18th root 11.757875938204789
19th root 10.327513583579238
20th root 9.189586839976281
Sau đó, tôi so với Wolfram Alpha cho mỗi gốc để có được những lỗi tôi trích dẫn ở trên.
Tùy thuộc vào ứng dụng của bạn, có lẽ điều này sẽ đủ tốt.
Phương pháp chia dài là phương pháp tốt nhất để tính toán gốc thứ n của bất kỳ số thực dương nào. Nó cho độ chính xác tốt nhất của mỗi chữ số được tính toán. Không có dự đoán ban đầu và không có xấp xỉ lặp lại là bắt buộc.
một ví dụ đáng giá một nghìn từ ... –
Trong khi điều này có thể là một gợi ý có giá trị để giải quyết vấn đề, một câu trả lời hay cũng thể hiện giải pháp. Vui lòng [chỉnh sửa] để cung cấp mã ví dụ để hiển thị ý của bạn. Ngoài ra, hãy xem xét việc viết bài này làm nhận xét thay thế. –
- 1. gốc thứ n của một số
- 2. c có được byte thứ n của số nguyên
- 3. JavaScript: Tính gốc thứ n của một số
- 4. Tính toán gốc thứ n?
- 5. Tính toán gốc thứ N với số học số nguyên
- 6. được tuần thứ n của tháng trong C#
- 7. Tính toán gốc thứ N bằng bcmath trong PHP
- 8. Làm thế nào để có được chữ số thứ N của một số nguyên với các hoạt động bit-khôn ngoan?
- 9. Làm cách nào để chọn chữ số thứ n trong một số nguyên lớn bên trong javascript?
- 10. Làm thế nào để có được các phần tử n đầu tiên của một std :: map
- 11. Python - cách tính tất cả các gốc thứ n của một số?
- 12. Gốc chung của một số trong c
- 13. Làm thế nào để có được cột thứ n với regexp delimiter
- 14. thứ n hạn của loạt
- 15. Làm thế nào để xóa yếu tố n-thứ của mảng trong MongoDB
- 16. Lấy dòng thứ n của tệp văn bản trong C++
- 17. lấy số thứ n của một phần tử trong jquery
- 18. Làm thế nào để có được N từ đầu tiên từ một NSString trong Objective-C?
- 19. Làm thế nào để đặt các cặp số nguyên không theo thứ tự trong C++?
- 20. Làm thế nào để có được số trang bookmark của
- 21. làm thế nào để tìm số nhỏ nhất của các hoạt động để tính x^n
- 22. Làm thế nào để có được thứ 4 thứ hai của tháng với js?
- 23. Thư viện của bên thứ ba được bao gồm trong các mô-đun node.js gốc như thế nào?
- 24. Trong Notepad ++ làm cách nào để tìm thấy sự xuất hiện thứ n của một chuỗi
- 25. Với 2 mảng sắp xếp các số nguyên, tìm số lớn nhất thứ n trong thời gian sublinear
- 26. Tổng số các ước số lẻ lớn nhất của số n đầu tiên
- 27. Làm thế nào để có được chỉ số phần tử lớn nhất trong mảng matlab
- 28. Làm thế nào để có được tất cả mọi thứ sau khi một chỉ số nhất định trong chuỗi C#
- 29. cách xác định xem phần tử lớn nhất thứ k của heap có lớn hơn x
- 30. Làm thế nào để có được các tài liệu N cuối cùng với mongoid?
Đúng, đặc biệt là chức năng mpz_root. –