「unsigned long long」サイズを超える変数を C または任意のプログラミング言語で表現する方法。無限大を表す変数の型はありますか?
4 に答える
参照:浮動小数点無限大
float と double の両方に、無限の表現があります。整数型には、この機能が言語に組み込まれていませんが、必要な場合は、その目的で割り当てINT_MAXまたはLONG_MAXから使用できるトリックがあります。limits.h
もちろん、それを行うには、計算を完全に制御する必要があります。通常の計算がその値で終了し、それ以降無限大として扱われることは望ましくありません。
ネイティブ型で表現できる数値よりも大きい数値については、GMPなどの任意精度の数学ライブラリを使用できます。
数値の無限大を表すことについて話しているのですか、それとも大きすぎて 1 つのネイティブ データ型に収まらない数値を操作することについて話しているのでしょうか? 後者の場合、より大きな数値を表すデータ構造を作成し、それらの構造の演算を実装する独自のロジックを作成することができます。
Project Eulerのいくつかの問題に対して、基本的なレベルでこれを行いました。私のアプローチは、小学校で使用されていたアルゴリズムを拡張することでした。これにより、1 桁の数字といくつかの桁上げ、剰余、借用などを使用する演算に分解することで、複数桁の数字の演算を行うことができました。
このウィキペディアの任意精度算術に関する記事にも興味があるかもしれません。
unsigned long longは C 標準整数型の中で最大のものであり、少なくとも 2 64 – 1 を表すことができなければなりません。標準 C には、これより大きい値を表す必要がある整数型はありません。一部の実装では、拡張機能としてより大きな型が提供される場合がありますが、それに依存することはできません。
test.c:3: エラー: 'long long long' は GCC には長すぎます
標準の整数型は、その目的専用の特定のビット パターン (たとえば、ULLONG_MAX) を指定しない限り、無限を表すことはできません。浮動小数点型には無限の表現があると思います。標準 Cisinfマクロを使用して、浮動小数点型が無限大かどうかを確認したり、マクロを使用して浮動小数点型を無限大に設定したりできますINFINITY。ただし、標準 C では、正と負の無限大を表現できる浮動小数点型は必要ないと思います。