Этот вопрос интересен, но поднимает некоторые вопросы.Во-первых, вы никогда не сможете представить все действительные числа с помощью (даже теоретически бесконечного) компьютера по причинам кардинальности.
То, что вы ищете, - это тип данных "символические числа",Вы можете представить себе своего рода дерево выражений с предопределенными константами, арифметическими операциями и, возможно, алгебраическими (корни многочленов) и трансцендентными (exp, sin, cos, log и т. Д.) Функциями.
Теперь забавная частьистория: вы не можете найти алгоритм, который сообщает, представляют ли два таких дерева одно и то же число (или, что эквивалентно, проверяет, является ли такое дерево нулевым).Я не буду утверждать ничего точного, но в качестве подсказки это похоже на проблему Остановки (для компьютерных ученых) или теорему Гёделя о неполноте (для математиков).
Это делает такой класс довольно бесполезным.
Для некоторых подполей вещественных чисел у вас есть канонические формы , такие как a / b для рациональных чисел или конечные алгебраические расширения рациональных чисел (a / b + ic / d для комплексных рациональных чисел,a / b + sqrt (2) * a / b для Q [sqrt (2)] и т. д.).Они могут использоваться для представления некоторых конкретных наборов алгебраических чисел.
На практике это самая сложная вещь, которая вам понадобится.Если у вас есть особая необходимость, например диапазоны чисел с плавающей запятой (до доказать , то какой-то результат за указанный интервал, это, вероятно, самое близкое значение, которое вы можете получить к действительным числам) или числа произвольной точности , у вас есть свободно доступные классы везде.Google boost::range
для первого и gmp
для второго.