Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O .NET 9 impõe um comprimento máximo de BigInteger, ou seja, ele não pode conter mais do que (2^31) - 1 (aproximadamente 2,14 bilhões) bits. Tal número representa uma alocação de quase 256 MB e contém aproximadamente 646,5 milhões de dígitos. Esse novo limite garante que todas as APIs expostas sejam bem comportadas e consistentes, ao mesmo tempo que permite números que estão muito além da maioria dos cenários de uso.
Comportamento anterior
Anteriormente, você poderia atribuir um valor com comprimento de até Array.MaxLength * 32 bits a uma variável BigInteger.
Observação
Máquinas típicas atingiriam um OutOfMemoryException muito antes que esse limite pudesse ser alcançado.
Novo comportamento
A partir do .NET 9, BigInteger tem um comprimento máximo de (2^31) - 1 (aproximadamente 2,14 bilhões) bits. Se você tentar atribuir um valor maior, um OverflowException será lançado em runtime. Por exemplo, o código a seguir lança uma exceção:
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
Versão introduzida
.NET 9 Versão Prévia 6
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
BigInteger suporta a representação de valores inteiros de comprimento essencialmente arbitrário. No entanto, na prática, o comprimento é limitado pelos limites do computador subjacente, como a memória disponível ou o tempo que levaria para calcular uma determinada expressão. Além disso, existem algumas APIs que falham com entradas que resultam em um valor muito grande. Por essas razões, é agora aplicado um comprimento máximo.
Ação recomendada
Se o seu código for afetado, diminua o comprimento do valor que você está atribuindo a BigInteger ou adicione uma verificação de comprimento.