C# uint64 - хранить данные?
Есть ли лучший способ хранить числовые данные в формате uint64, кроме использования x цифр для одного куска и y цифр для другого? (Всего 20 цифр для работы)
Я пытаюсь хранить информацию об объекте без лишних затрат на создание структуры или класса. Мне нужно получить / установить как можно быстрее с минимальными накладными расходами.
2 ответа
Итак, насколько я знаю, кодирование вокселей. Если вы хотите сохранить данные "блоков", которые определены один за другим, вы можете использовать дерево интервалов, где ключ каждого узла - начало цикла, а значение - координата цикла. Пример реализации.
Кроме того, вы НИКОГДА не сохраняете отдельный блок как класс, но SET блоков, например, блок 3x3, можно сделать так:
как вы видите, я только что закодировал положение данных из 9 блоков в два бита. Это упрощенный метод, для которого размер данных не является проблемой, а обеспечивает быструю реализацию итерации, которая должна сформировать некоторый алгоритм.
Прежде чем начать играть с Voxels, прочитайте эти
Давайте сделаем воксельный двигатель
Воксельные двигатели есть везде…
Voxel Engine - Хранение данных
Интернет полон ответов, но они предоставят вашу информацию, которая вам нужна. Также ключевое слово, которое я думаю, что вы скучали, это VOXEL
При использовании uint64
или же ulong
не является обязательным требованием, я предлагаю вам использовать класс BigInteger. Это было разработано, чтобы эффективно хранить произвольно большие числа.
Это эффективно? Если вы декомпилируете код, вы увидите, что они хранят массив битов для управления числом. То есть с N
бит, он хранит число до 2^N - 1
,