Czy istnieje biblioteka C++, która może zawierać n-ty korzenie dużych liczb (liczby, które nie mieszczą się w unsigned long long
)?Jak zdobyć n-ty root dużych liczb w C++?
Odpowiedz
Można użyć GMP, popularnej biblioteki matematycznej z dowolną precyzją. Ma C++ bindings.
Jeśli chcesz kodować ten sam, sprawdź stronę Wikipedii na uruchamianych n korzeni:
http://en.wikipedia.org/wiki/Nth_root
Algorytm iteracyjny jest dość prosta:
pierwiastkowanie z numerem A może być obliczany przez n-ty algorytm root, specjalny przypadek metody Newtona. Rozpocząć od wstępnego odgadnięcia x (0), a następnie za pomocą iteracji relację nawrotów
x(k+1) = [(n - 1) * x(k) + A/x(k)^(n - 1)]/n
Zatrzymaj kiedy już konwergentnego do żądanej dokładności.
To zależy od tego, o ile większe niż 2^64, które chcesz iść, tak myślę. Po prostu używanie podwójnych jest dobre do około 1 części w 10^9. Napisałem program testowy w 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;
}
która wyprodukowała następujące dane wyjściowe:
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
Potem porównaniu z Wolfram Alpha dla każdej nasady aż pojawia się błąd zacytowałem powyżej.
W zależności od zastosowania, być może będzie to wystarczająco dobre.
Metoda dzielenia długiego jest najlepszą metodą obliczania n-tego pierwiastka o dowolnej dodatniej liczbie rzeczywistej. Daje najlepszą dokładność każdej obliczonej cyfry. Nie jest wymagane początkowe odgadnięcie i żadne iteracyjne przybliżenie.
przykład jest wart tysiąca słów ... –
Chociaż może to być cenna wskazówka, aby rozwiązać problem, dobra odpowiedź pokazuje również rozwiązanie. Proszę [edytuj], aby podać przykładowy kod, aby pokazać, co masz na myśli. Ewentualnie rozważ napisanie tego jako komentarza. –
- 1. C: Reprezentacja dużych liczb całkowitych
- 2. Obsługa "dużych" liczb całkowitych w C#
- 3. Rodzaje dużych liczb
- 4. Biblioteka dużych liczb JavaScript?
- 5. Dzielenie dużych liczb w Pythonie
- 6. Obsługa dużych liczb w kodzie
- 7. drukowanie bardzo dużych liczb zmiennoprzecinkowych
- 8. Czy są jakieś solidne implementacje dużych liczb całkowitych w C?
- 9. CSS Kerning dla dużych liczb
- 10. Formatowanie dużych liczb za pomocą .NET
- 11. Przechowywanie bardzo dużych liczb całkowitych w MySQL
- 12. Szybkie mnożenie bardzo dużych liczb całkowitych
- 13. C++ Jaki typ zmiennej dla bardzo dużych liczb całkowitych?
- 14. Jak podsumować tablicę liczb całkowitych w C#
- 15. Generowanie bardzo dużych liczb losowych java
- 16. JavaScript: toString (36) dla dużych liczb całkowitych
- 17. Znajdowanie sum liczb pierwszych między interwałami (program C++ nie działa dla dużych liczb)
- 18. Dziwne zachowanie np.sqrt dla dużych liczb całkowitych
- 19. C# find Nth Root
- 20. Jak zdobyć -std = C++ 11 w/libstdC++?
- 21. Jak zdobyć dane w ComboBox C#
- 22. Jak zdobyć folder% AppData% w C?
- 23. C# Garbage Collection Active Root
- 24. Uruchom program C++ w Clion jako root
- 25. W R lepiej używać liczb całkowitych64, liczbowych lub znakowych dla dużych liczb całkowitych?
- 26. "interwał jest pusty", Lua math.random nie działa dla dużych liczb?
- 27. C++ 11 liczb losowych
- 28. RSA Szyfrowanie dużych danych w C#
- 29. Czy istnieje biblioteka .NET do formatowania dużych liczb jako tekst?
- 30. Jak zdobyć ToDictionary do pracy w F #?
Tak, w szczególności funkcja mpz_root. –