Расчет, который вы делаете, выходит за рамки количества байтов ulong
, необходимого для содержания большого значения ...
https://docs.microsoft.com/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
Вам нужно использовать десятичное число, например:
public static decimal Total()
{
decimal output = 1ul;
for ( var x = 0; x < 64; x++ )
{
output *= 2;
}
return output;
}
Этот вывод 18446744073709551616
.
Действительно, если мы добавим ключевое слово checked
в метод, используя ulong
:
public static ulong Total()
{
ulong output = 1ul;
for ( var x = 0; x < 64; x++ )
{
output = checked(output * 2);
}
return output;
}
Мы получаем исключение переполнения.
Вы также можете использовать System.Numerics.BigInteger
для очень больших целых чисел.
https://docs.microsoft.com/dotnet/api/system.numerics.biginteger