Wydaje się, że brakuje kilku istotnych rzeczy tutaj:
- Istnieje różnica między rodzimy arytmetyki i bignum arytmetyki.
- Wygląda na to, że interesuje Cię bignum arytmetyczna.
- C++ nie obsługuje bignum arytmetyczna. Pierwotne typy danych są ogólnie arytmetyczne dla procesora.
Aby uzyskać arytmetykę bignum (arbitralna precyzja), musisz ją zaimplementować samodzielnie lub skorzystać z biblioteki. (takich jak GMP) W przeciwieństwie do Java i C# (między innymi), C++ nie ma biblioteki dla arbitralnej arytmetycznej precyzji.
Wszystkie te wyszukane algorytmy:
- Karatsuba:
O(n^1.585)
- Toom-Cook
< O(n^1.465)
- FFT oparte:
~ O(n log(n))
są stosowane tylko do bignum arytmetyczne, które są realizowane w bibliotekach bignum. To, czego procesor używa do swoich natywnych operacji arytmetycznych, jest w pewnym stopniu nieistotne, ponieważ zwykle jest to stały czas.
W żadnym wypadku nie polecam próby zaimplementowania biblioteki bignum. Zrobiłem to już wcześniej i jest to dość wymagające (zwłaszcza matematyka). Więc lepiej korzystaj z biblioteki.
Cokolwiek zrobi chip, robi to. – bmargulies
Tytuł sprawił, że pomyślałem o odtwarzaniu liczb całkowitych :) – harold
@harold Najpierw muszą zrobić coś, co nazywa się "randki". – Manish