当long double不够时使用什么类型?

时间:2010-07-17 14:51:45

标签: c biginteger integer-overflow integer-division

我正在编写一个程序,为矩阵的每个条目分配素数,然后我需要将它们中的一些相乘。 由此产生的数字迅速增长,我对使用哪种类型感到不知所措,因为我正在使用long double进行“环绕”:S

感谢所有帮助。

-Pickel

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

BigInt

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

你的数字有多大?

Maximum value vs. size of long and double in .NET

讨论了一些相关内容,但可能超出了您的作业范围

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

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

但是,对于作业而言,您可能不需要将事情变得如此复杂以至于需要使用APL

答案 4 :(得分:0)

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

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

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

答案 5 :(得分: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