Новый BigInteger - PullRequest
       1

Новый BigInteger

4 голосов
/ 09 августа 2010

.NET 4.0 теперь имеет новый тип данных System.Numeric.BigInteger. Насколько я понимаю, это может содержать числа, которые имеют до 1 миллиона цифр. Простые арифметические операции могут быть выполнены с этим числом. Что меня интересует, так это то, как Microsoft реализовала такую ​​вещь, учитывая, что она явно превысила бы 32-битные и даже 64-битные. Как это не переполняется?

Ответы [ 5 ]

5 голосов
/ 09 августа 2010

Арифметические операции выполнялись над структурами, которые превышают собственные целочисленные (и с плавающей запятой) размеры в течение довольно продолжительного времени. Обычно это делается путем превращения одной концептуальной арифметической операции над большей структурой (например, сложением) в серию операций над несколькими нативными типами.

3 голосов
/ 09 августа 2010

BigInteger использует Математика произвольной точности .

В информатике арифметика произвольной точности - это метод, при котором вычисления выполняются для чисел, цифры точности которых ограничены только доступной памятью хост-системы.

Используйте его только тогда, когда вам нужно работать с очень большими числами:

Произвольная точность используется в приложениях, где скорость арифметики не является ограничивающим фактором, или когда требуются точные результаты с очень большими числами.

2 голосов
/ 09 августа 2010

Внутренне тип BigInteger реализован в виде массива целых чисел без знака (uint32 [] в c #) и другого поля, в котором указывается знак.

Массив дает типу возможность хранить такие большие числа иметоды и операторы скрывают детали работы со сложной структурой, упрощая ее использование.

1 голос
/ 09 августа 2010

Несколько слов о структуре BigInteger

BigInteger - это структура по своей природе.Он имеет множество статических методов, которые позволяют вам выполнять различные математические операции над BigIntegers.Существует также много операторов и преобразований типов, определенных для BigInteger, поэтому вы можете использовать BigInteger как обычные целые числа.Взгляните на документацию членов BigInteger.

Из этого блога

Я также прочитал бы, поскольку автор выше предлагает документацию MSDN .

1 голос
/ 09 августа 2010

Точно так же, как вы делаете арифметику с цифрами 0-9.Вам не нужно брать чужие пальцы, когда вы меняете деньги на двадцать.Класс больших целых чисел использует 32-битные или 64-битные целые числа практически так же, как вы используете цифры.Это очень упрощает, особенно когда числа становятся большими

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...