2

我正在编写一个程序,将素数分配给矩阵的每个条目,然后我需要将其中的一些相乘。结果数字迅速增长,我不知道要使用哪种类型,因为我得到了 long double 的“环绕”:S

感谢所有帮助。

-皮克尔

4

6 回答 6

3

除非您需要实现自己的任意精度类型,否则请使用GMP。您将需要mpz_t(整数)类型。它有很好的文档记录,您可以查看教程和 StackOverflow 问题。

于 2010-07-17T15:21:07.370 回答
0

假设您使用“long double”作为 C 或 C++ 赋值的类型?

你的数字有多大?

.NET 中 long 和 double 的最大值与大小

讨论一些相关的东西,但可能超出你的作业范围

一般来说,您需要一个任意精度库:

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic

但是很有可能,出于作业的目的,您不需要使事情变得如此复杂以至于需要使用 APL

于 2010-07-17T15:04:40.357 回答
0

如果是整数,请使用 BigInteger 类(在 Java 或 .NET 中)

如果是浮点数,请使用BigDecimal(仅在 java 中,.net 仍然没有任意精度的浮点数

如果您使用 C/C++,则必须创建自己的类型

于 2010-07-17T15:18:30.263 回答
0

您可能必须实现自己的大整数类型。查看:

大整数

于 2010-07-17T14:56:00.340 回答
0

如果它只是整数,那么long long int(至少在 C/C++ 中)。如果我们谈论双打...使用 BigDecimal 类。

于 2010-07-17T14:57:23.070 回答
0

如果您拒绝使用库,并且不想发明自己的大类型,为什么不跟踪 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

取一个 64 位 int 的两个,你可以安全到 2^2^64

于 2010-07-17T16:09:59.030 回答