この質問は興味深いですが、いくつかの問題が発生します。まず、カーディナリティの理由から、(理論的には無限であっても) コンピューターを使用してすべての実数を表すことはできません。
あなたが探しているのは、「記号数」データ型です。定義済みの定数、算術演算、代数 (多項式の根) および超越 (exp、sin、cos、log など) 関数を使用した、ある種の式ツリーを想像できます。
ここで、この話の面白いところは、そのような 2 つのツリーが同じ数を表しているかどうかを判断する (または同等に、そのようなツリーがゼロかどうかをテストする) アルゴリズムを見つけることができないということです。正確なことは述べませんが、ヒントとして、これは停止問題 (コンピューター科学者向け) またはゲーデル不完全性定理 (数学者向け) に似ています。
これにより、そのようなクラスはほとんど役に立たなくなります。
実数の一部のサブフィールドでは、有理数の a/b や有理数の有限代数拡張 (複素有理数の a/b + ic/d、a/b + sqrt(2) * a/ b は Q[sqrt(2)] など)。これらは、代数的な数の特定のセットを表すために使用できます。
実際には、これは必要となる最も複雑なものです。浮動小数点数の範囲(特定の結果が指定された間隔内にあることを証明するため、これはおそらく実数に最も近いものです) や任意精度の数値など、特定の必要性がある場合は、どこでも自由に利用できるクラスを利用できます。boost::range
前者はグーグルgmp
、後者はグーグル。