Забудьте с плавающей запятой, вам нужны битовые строки, которые представляют целые числа
Это занимает чуть меньше 1/2 мегабайта на номер. «Эффективный» может означать несколько вещей. Пространственно-эффективный? Время эффективное? Легко программируется с?
Ваш вопрос помечен с плавающей точкой , но я совершенно уверен, что вам вообще не нужна плавающая точка. Вся идея с плавающей запятой заключается в том, что наши данные известны только нескольким значащим цифрам, и даже знаменитые физические и химические константы точно известны лишь нескольким или двум цифрам. Поэтому имеет смысл сохранить разумное количество цифр, а затем просто записать показатель степени.
Но твоя задача совсем другая. Вы должны учитывать каждый бит. Учитывая это, ни один пакет с плавающей запятой или десятичной арифметической не будет работать, если только это не шаблон, который вы можете произвольно изменить, и тогда показатель будет бесполезным. Так что вы можете использовать целые числа.
Что вам действительно нужно, так это строка битов. Это просто массив удобных типов. Я предлагаю <stdint.h>
и просто использовать uint32_t[125000]
(или 64), чтобы начать. На самом деле это может быть хорошим использованием более непонятных констант из этого заголовка, которые выбирают размеры битов, которые быстры на данной платформе.
Чтобы быть более конкретным, нам нужно знать больше о ваших целях. Это для практики на определенном языке? Для некоторого исследования в теории чисел? Если последнее, почему бы просто не использовать язык, который уже поддерживает язык Bignum, такой как Ruby?
Тогда проблема с хранилищем - чужая. Но, если вы действительно хотите реализовать пакет с большим числом, то я мог бы предложить использовать 4-битные строки bcd или даже 8-битные строки ascii с печатными цифрами, просто потому, что все будет проще писать и отлаживать и максимальная эффективность пространства и времени может не иметь большого значения.