开发者

what type to use when long double is not enough?

I'm writing a program that assigns prime numbers to each entry of a matrix and then I'll need to multiply some of them. The resulting number grows rapidly and I'm at a loss as to which type to use, as I'm getting "wrap-around" with long do开发者_开发知识库uble :S

All the help is appreciated.

-Pickel


Unless you're required to implement your own arbitrary precision type, use GMP. You'll want the mpz_t (integer) type. It's pretty well documented, and there are tutorials and StackOverflow questions you can look at.


You may have to implement your own big integer type. Check out:

BigInt


If it's just integers, there's long long int (at least in C/C++). If we're talking about doubles... Use a BigDecimal class.


Assuming you are using "long double" as a type that it's a C or C++ assignment?

How big are your numbers?

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

discusses some related stuff but may be beyond the scope of your assignment

Generally speaking you need an arbitrary precision library:

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

But chances are that for purposes of an assignment you are not required to make things so complicated as to require the use of an APL


if it's an integer, use the BigInteger class (in Java or .NET)

if it's a floating point, use BigDecimal (only in java, .net still does not have a arbitrary precision floating number

if you're in C/C++, you have to create your own type


If you refuse to use a library, and don't want to invent your own big types, why don't you keep track of extra factors of 2, or something like that.

while ( mybignum > BIGNUM_THRESH )
{
    twos++;
    mybignum /= 2; // use >>=1 if you use an integer type (you said you used double so therefore the /=)
}

then print out your answers as mybignum * 2**twos

Take a 64 bit int for twos and you're safe up to 2^2^64

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜