行列の各エントリに素数を割り当てるプログラムを作成しており、そのうちのいくつかを乗算する必要があります。結果の数値は急速に増加し、long double で「ラップアラウンド」を取得しているため、どのタイプを使用するかについて途方に暮れています:S
すべての助けに感謝します。
-ピッケル
行列の各エントリに素数を割り当てるプログラムを作成しており、そのうちのいくつかを乗算する必要があります。結果の数値は急速に増加し、long double で「ラップアラウンド」を取得しているため、どのタイプを使用するかについて途方に暮れています:S
すべての助けに感謝します。
-ピッケル
独自の大きな整数型を実装する必要がある場合があります。チェックアウト:
それが単なる整数であれば、long long int
(少なくとも C/C++ では) あります。double について話している場合は... BigDecimal クラスを使用します。
ライブラリの使用を拒否し、独自の大きな型を発明したくない場合は、余分な因数 2 などを追跡してみませんか。
while ( mybignum > BIGNUM_THRESH )
{
twos++;
mybignum /= 2; // use >>=1 if you use an integer type (you said you used double so therefore the /=)
}
次に、答えを次のように印刷しますmybignum * 2**twos
2 の 64 ビット int を取ると、最大 2^2^64 まで安全です
整数の場合は、BigInteger クラスを使用します (Java または .NET で)
浮動小数点の場合は、BigDecimalを使用します(Java のみ、.net にはまだ任意精度の浮動小数点数がありません)
C/C++ を使用している場合は、独自の型を作成する必要があります
CまたはC++の割り当てである型として「long double」を使用していると仮定しますか?
あなたの数字はどれくらいですか?
いくつかの関連事項について説明しますが、割り当ての範囲を超えている可能性があります
一般的に言えば、任意精度のライブラリが必要です。
http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic
しかし、割り当てのために、APL を使用する必要があるほど複雑にする必要はない可能性があります。