Наиболее эффективная реализация класса большого числа

при выполнении вычислений на очень больших числах, где интегральные типы данных, такие как double или int64, не хватает, может потребоваться отдельный класс для обработки таких больших чисел.

кто-нибудь хочет предложить эффективный алгоритм о том, как лучше всего это сделать?

5 ответов


есть 2 решения вашей проблемы:

  • простой способ: Используйте внешнюю библиотеку, такую как 'в GNU МП Bignum библиотека и забудьте о деталях реализации.

  • трудный путь: Создайте свой собственный класс / структуру, содержащую несколько типов данных более высокого порядка, таких как переменные double или int64, и определите основные математические операции для них, используя перегрузку операторов (в C++) или с помощью методов с именем add, вычитание, умножение, сдвиг и т. д. (на JAVA и других языках OO).

Дайте мне знать, если вам нужна дополнительная помощь. Я делал это пару раз в прошлом.


В C# 4.0 используйте тип BigInteger


вы спрашиваете о арифметика произвольной точности, на которой книги были написаны. Если вам просто нужна простая и довольно эффективная библиотека BigNum для C#, вы можете проверить IntX.


использование встроенных функций языка работы для меня.

Java имеет BigInteger и BigDecimal, и Python автоматически переключается на объект, подобный Java, если число выходит из диапазона integer или еще много чего.

Что касается других языков, я понятия не имею.

Я ненавижу изобретать колесо.


создание собственной библиотеки BigNum сложно, поэтому я бы сказал, как jjnguy. Используйте в качестве библиотек все, что предлагает ваш язык.

в .net ссылаются на библиотеку dll VisualJ, поскольку они содержат классы BigInteger и BigDecimal. Однако вы должны знать о некоторых ограничениях этих библиотек, таких как отсутствие метода квадратного корня, например.