@bLercs

Как хранить и обрабатывать слишком большие числа?

Сделал простенькую программку, которая с boost.filesystem подсчитывает размер файлов в байтах в поддиректориях. Если взять папку, внутри которой лежит ОЧЕНЬ много лёгких файлов, то любой целочисленный тип будет моментально превышен(да и вывод будет нечитабельным). В связи с чем появился вопрос: в какую сторону копать по поводу хранения и обработки очень больших чисел?
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
1. Суммарно файлы на диске не могут весить больше, чем на этот диск имеет объём.
2. int64_t имеет максимальное значение порядка 18 квинтилионов. 18 квинтилионов байт - это порядка 16 млн дисков по 1тб

подсчитывает размер файлов в байтах в поддиректориях. Если взять папку, внутри которой лежит ОЧЕНЬ много лёгких файлов, то любой целочисленный тип будет моментально превышен

Это ещё почему?
Она же суммирует их => если нормально пишешь, то нет разницы - много маленьких или мало больших.

Тоесть у тебя переполниться счётчик не может, даже если ты попробуешь посчитать суммарный объём всего интернета в байтах.

Значит у тебя в коде ошибка.

А вот если бы у тебя реально в int64_t значения не умещались, то тогда тебе следовало бы посмотреть на длинную арифметику.
В рамках того же буста есть Boost multiprecision library, которая предоставляет разные типы для работы с большими числами.
https://en.wikipedia.org/wiki/List_of_arbitrary-pr...

да и вывод будет нечитабельным

А вот это уже другой вопрос. Если вывод нечитабельный, значит виноват тот, кто задачу поставил, тк он по определнию будет нечитабельным, раз ты в байтах выводишь.
Можно сократить, если выводить, например, в кило-/мега-/гига- байтах, но тогда упадёт точность.
Можно добавить пробелы между разрядами - тогда будет легче читать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы