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