Кажется, вам здесь не хватает нескольких важных вещей:
- Существует разница между нативным арифметическим и bignum арифметика.
- Вы, кажется, интересуетесь bignum арифметика.
- C ++ не поддерживает bignum арифметика.Примитивные типы данных, как правило, собственные арифметические для процессора.
Чтобы получить арифметику bignum (произвольная точность), вам нужно реализовать ее самостоятельно или использоватьбиблиотека.(например, GMP ) В отличие от Java и C # (среди прочих), C ++ не имеет библиотеки для арифметики произвольной точности.
Все эти причудливые алгоритмы:
- Карацуба:
O(n^1.585)
- Toom-Cook:
< O(n^1.465)
- На основе БПФ:
~ O(n log(n))
применимы только к арифметике bignum, котораяреализованы в библиотеках bignum.То, что процессор использует для своих собственных арифметических операций, несколько не имеет значения, поскольку обычно это постоянное время.
В любом случае, я не рекомендую вам пытаться реализовать библиотеку bignum.Я делал это раньше, и это довольно сложно (особенно математика).Так что вам лучше использовать библиотеку.