Обработка чисел за диапазонами 64 битной системы

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Добрый день форумчане
При работе с большими числами имеется такой "затык" в обработке, так как - 64-битный регистр способен хранить в себе одно из 2 64 = 18 446 744 073 709 551 616 неподписанных значений или же 922 337 2036 854 775 807 значений со знаками.
Имеется в C# возможность как то раздвинуть эти границы для обработки значений на много порядков выше?
Я вижу что в онлайне, имеются калькуляторы которые принимают и обрабатывают числа с очень большими порядками, но вот сколько не гуглил - про Шарп такого не нахожу (хотя может сглазами не в порядке).
Спасибо
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
разрядность типа double составляет 64 бита, что приближенно соответствует диапазону представления чисел от 5E-324 до 1,7Е+308
 
  • Спасибо
Реакции: DevOps

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 014
Благодарностей
540
Баллы
113
Добрый день форумчане
При работе с большими числами имеется такой "затык" в обработке, так как - 64-битный регистр способен хранить в себе одно из 2 64 = 18 446 744 073 709 551 616 неподписанных значений или же 922 337 2036 854 775 807 значений со знаками.
Имеется в C# возможность как то раздвинуть эти границы для обработки значений на много порядков выше?
Я вижу что в онлайне, имеются калькуляторы которые принимают и обрабатывают числа с очень большими порядками, но вот сколько не гуглил - про Шарп такого не нахожу (хотя может сглазами не в порядке).
Спасибо
94681

94682
 
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
разрядность типа double составляет 64 бита, что приближенно соответствует диапазону представления чисел от 5E-324 до 1,7Е+308
Здравствуйте
То есть получается в Шарпе это не возможно сделать?
По ссылке взял для теста образец кода, вставил максимальное значение 9223372036854775807 и попробовал умножить на 10
C#:
long result;
const long test = 9223372036854775807;
result = test * 10;
В итоге
Компиляция кода Ошибка в действии "CS0220" "The operation overflow at compile time in checked mode". [Строка: 3; Cтолбец: 10]
:(
UPD Затупил, поставил double и норм, спасибо
UPD 2 Я получил такой результат 9,22337203685478E+18 подскажите, как мне теперь работать с ним дальше? Как привести это значение в нормальное число, чтобы вывести, например в список "за борт"
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 014
Благодарностей
540
Баллы
113
Здравствуйте
То есть получается в Шарпе это не возможно сделать?
По ссылке взял для теста образец кода, вставил максимальное значение 9223372036854775807 и попробовал умножить на 10
C#:
long result;
const long test = 9223372036854775807;
result = test * 10;
В итоге
Компиляция кода Ошибка в действии "CS0220" "The operation overflow at compile time in checked mode". [Строка: 3; Cтолбец: 10]
:(
Ошибка компиляции потому что получаемое число не влезает в диапазон чисел Long, используй ulong
 
  • Спасибо
Реакции: DevOps

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 014
Благодарностей
540
Баллы
113
А лучше используй var, как реальные пацаны) пусть компилятор сам разбирается че ему там надо)
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 014
Благодарностей
540
Баллы
113
var тут вызывает такую же ошибку
"The operation overflow at compile time in checked mode"
94687

94688


C#:
            string a = "91389681247993671255432112000000";
            string b = "91389681247993671255432112000000";

            BigInteger result = (BigInteger.Parse(a) * BigInteger.Parse(b));



            project.SendErrorToLog(Convert.ToString(result));
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Посмотреть вложение 94687
Посмотреть вложение 94688

C#:
            string a = "91389681247993671255432112000000";
            string b = "91389681247993671255432112000000";

            BigInteger result = (BigInteger.Parse(a) * BigInteger.Parse(b));



            project.SendErrorToLog(Convert.ToString(result));
Просто феерично
Спасибо !!!!!!!!!!!
UPD Вылавливать на ошибке - это что то, но есть "затык" в список то никак не записать
 
Последнее редактирование:

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 014
Благодарностей
540
Баллы
113
  • Спасибо
Реакции: DevOps

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)