C 当长双精度不够时,使用哪种类型?

C 当长双精度不够时,使用哪种类型?,c,biginteger,integer-overflow,integer-division,C,Biginteger,Integer Overflow,Integer Division,我正在写一个程序,给矩阵的每个条目分配素数,然后我需要将其中的一些相乘。 结果数字迅速增长,我不知道该使用哪种类型,因为我用长的double:S“环绕” 感谢所有的帮助 -Pickel您可能必须实现自己的大整数类型。退房: 如果它只是整数,那么就有long-long-int(至少在C/C++中是这样)。如果我们说的是双打。。。使用一个BigDeCimple类。< P>假定你使用“long double”作为C还是C++赋值的一种类型? 你的数字有多大 讨论一些相关内容,但可能超出您的任务范围

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

感谢所有的帮助


-Pickel

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


如果它只是整数,那么就有
long-long-int
(至少在C/C++中是这样)。如果我们说的是双打。。。使用一个BigDeCimple类。

< P>假定你使用“long double”作为C还是C++赋值的一种类型? 你的数字有多大

讨论一些相关内容,但可能超出您的任务范围

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


但是,对于赋值,您可能不需要将事情复杂到需要使用APL,如果它是整数,请使用BigInteger类(在Java或.NET中)

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


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

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

如果你拒绝使用库,并且不想发明自己的大类型,为什么你不跟踪额外的因子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位整数作为两个整数,你可以安全地使用2^2^64

你的实现在什么语言上?你可能需要实现你自己的数据类型。甚至可能有一些库。C。你有推荐的吗?我有点像noob:Dit是C赋值。例如,对于一个6x6矩阵,我必须乘以7*29*79*89*97*101×113×127×131×137×139×149×151。我得到长long int的同样的问题。然后我会检查一个大的十进制。谢谢!这听起来很复杂,我是NoOB!我只需要这个项目的一小部分。你会更容易创建我自己的类型吗?我的意思是只创建我自己的类型。我只考虑自己做。教育价值,不是为了节省时间。+1用于使用现有的库。编写自己的库需要花费大量时间-这并不困难,我只是说它很混乱。我不是指创建自己的库。我只是需要一个类型,并能够对它们进行乘除。我想我明白你的意思。不过,快速提问,如果bignum大于阈值,它会被删除ows up负数所以mybignum>BIGNUM\u THRESH=0,对吗?因为“环绕”我的意思是不,这完全不是点!浮点类型的工作方式与科学记数法类似,基数为2:比如Y*2^X,0我想出了另一种解决方案,但为了论证起见,我只需要素数,所以如果每个数都是整数Y乘以2的幂,它们就不是素数:(