long和int不够,double不起作用

时间:2014-02-03 15:01:00

标签: c++

我正在使用C++,我听说并体验过可以存储在int中的最大值 和long是一样的。

但我的问题是我需要存储一个超过最大值的数字 long变量。 double变量的大小已足够。

但问题是使用double变量 避免使用运算符%,这对于我的函数更容易编码和某些时间是必要的 似乎除了使用它之外别无他法。

那么请您告诉我实现目标的方法吗?

6 个答案:

答案 0 :(得分:6)

这取决于目的。为了更好的答案,请给我们更多的背景

查看(unsigned) long longGMP

答案 1 :(得分:3)

您可以使用long long intunsigned long long int

类型

要知道untegral类型可以包含的最大值,可以使用以下结构,例如

std::numeric_limits<long long>::max();

要使用它,您必须包含标题<limits>

答案 2 :(得分:1)

所以,你想要计算大整数的模数。你加密的可能性是99%,这很难。您的问题意味着您可能应该为您的顶级问题(加密)寻找一些现成的解决方案。

无论如何,标准答案是使用库来处理大型精度整数,例如GNU MP

答案 3 :(得分:1)

#include <cmath>

int main ()
{
    double max_uint = 4294967295.0;
    double max1 = max_uint + 2.0;
    double max2 = (max1 + 1.0) * (max_uint + 1.0);
    double f = fmod(max2,max1);

    return 0;
}

max1max2都超过unsigned int限制,fmod返回正确的max2 % max1结果,这也是无符号的int限制:{{1 }}

修改

来自anatolyg的好提示:此方法仅适用于最大为2 ^ 52的整数。这是因为double的尾数有52位,并且每个更高的整数只能表示精度损失。例如。 2 ^ 80可以是==(2 ^ 80)+1和==(2 ^ 80)+2,依此类推。整数越高,精度越高,因为可表示整数的密度越大。

但是如果你只需要20比特的int而不是32比特的int,并且没有其他可能用内置整数类型实现这一点(我认为常规%会更快),那么你可以用这个......

答案 4 :(得分:0)

首先,int和long类型之间存在差异

但是要解决您的问题,您可以使用

unsigned long long int

答案 5 :(得分:0)

这里列出了您期望在C ++中使用的一些大小:

char      : 1 byte
short     : 2 bytes
int       : 4 bytes
long      : 4 bytes
long long : 8 bytes

float  : 4 bytes
double : 8 bytes 

我认为这清楚地解释了为什么你遇到困难并给你一个如何解决它们的暗示