2009-04-25 5 views
1

. Framework .net 4, по-видимому, будет включать класс BigInteger. Однако, похоже, я не могу понять, будет ли оно неизменным. Я также не могу решить, будет ли это хорошо.Будет ли System.Numerics.BigInteger неизменным? Должно быть?

Иммутируемость имеет массу преимуществ, особенно для чего-то, что «ценность-как», как большой-int. С другой стороны, основные операции должны быть эффективными, чтобы сделать дорогостоящие операции, такие как PowerMod, максимально быстрыми. Добавление на место будет быстрее, чем непреложное дополнение. В настоящее время я склоняюсь к неизменности как лучший выбор для класса библиотеки (думаю, String).

Кто-нибудь знает, будет ли он неизменным? Как вы думаете, это должно быть неизменным?

ответ

7

Я считаю, что это будет неизменным (я понимаю, что они в основном приносят реализацию DLR, которая неизменна, в ядро).

Да, это должно быть неизменным. Он должен вести себя как другие типы числовых значений, такие как Int32 и Double. Наличие изменчивого числового класса будет очень запутанным.

4

Я думаю, что это будет неизменным, и я думаю, что это единственный разумный выбор дизайна для типа «значение». (Как DLR, F # BigInt также неизменен. Замечательно, что мы, наконец, получаем этот тип в структуре, чтобы делиться между языками.)

1

Это будет неизменным. Да, это должно быть - иначе, он не будет вести себя как другие числовые типы, и вы увидите очень странное поведение, если вы перейдете от целочисленного кода к коду на основе biginteger.

Возможно, там должен быть дополнительный изменяемый тип, в следующих версиях (например, StringBuilder для строки)

1

Посмотрите на (предварительные, но официальные) документы на msdn.microsoft.com/en-us/library /system.numerics.biginteger(VS.100).aspx

Тип BigInteger является непреложным тип, который представляет собой произвольно большое целое число, значение которого в теории не имеет верхнего или нижнего предела. [...] Поскольку тип BigInteger неизменен [...], и поскольку он не имеет верхних или нижних границ, исключение OutOfMemoryException может быть выбрано для любой операции, которая приводит к увеличению значения BigInteger.

Смежные вопросы