长和 int 不够,双倍不起作用
long and int not enough and double wouldn't work
我正在使用C++
,我听说并经历了可以存储在int
中的最大值和long
是相同的。
,但我的问题是我需要存储一个超过最大值的数字long
变量。double
变量的大小足够漂亮。
但是问题是使用double
变量避免我使用操作员%
,这是更轻松地编码我的功能所必需的似乎没有其他方法。
所以请您告诉我一种实现目标的方法吗?
这取决于目的。要获得更好的答案,请给我们更多的上下文
看看(unsigned) long long
或GMP
您可以使用类型long long int
或unsigned long long int
要知道Untegral类型可以包含的最大值,您可以使用以下结构,例如
std::numeric_limits<long long>::max();
要使用它,您必须包括标题<limits>
因此,您要计算大整数的模量。您可能正在加密99%,这很难。您的问题意味着您应该为您的顶级问题(加密)寻找一些现成的解决方案。
无论如何,标准答案否则将库用于大精确整数,例如gnu mp。
#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;
}
max1
和max2
都超过unsigned int
限制,fmod
返回正确的max2 % max1
结果,这也超过了Unsigned INT限制:f == max_uint + 1.0
。
编辑:
来自AnatoLyg的好提示:此方法仅适用于2^52的整数。这是因为Double的Mantissa具有52位,并且每个较高的整数仅以精确损失表示。例如。2^80可以==(2^80) 1和==(2^80) 2,依此类推。整数越高,注册者越高,因为代表整数的密度变得更宽。
但是,如果您只需要与32位相比需要额外20位,并且没有其他可能性使用内置的积分类型(我认为常规%更快),那么您可以使用此...
首先,int和长型
之间有区别但是要解决问题,您可以使用
未签名的长int
这是您在C 中期望的一些尺寸的列表:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
long long : 8 bytes
float : 4 bytes
double : 8 bytes
我认为这清楚地解释了您为什么遇到困难,并给您暗示如何解决它们
- 为什么int myVar{5}给出错误并且不起作用?
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 将向量的大小()转换为 int 不起作用
- 为什么int* ptr_arr_int = {1,2};在C/C++中不起作用
- Vector.push_back(pair<int,int>(x1,x2 )));不起作用
- 为什么在调用 memcpy 到 bool 值后 memcpy 到 int 不起作用
- C ++ 11,为什么为向量定义unordered_map这个不起作用<int>?
- C++ 将 int 转换为双精度不起作用
- <int> 具有初始化的矢量工厂不起作用
- 为什么 std::list<string> 有效,但 std::list <int>不起作用
- int 有效,但字符串::size_type不起作用
- 为什么一个简单的bimap(std::string <-> int)不起作用?
- 为什么INT(char)的比较不起作用
- 长和 int 不够,双倍不起作用
- 为什么这种从int到double的转换不起作用?
- const_cast<double*> 有效,但 const_cast<int*> 不起作用
- 断言无符号的 int 确实是积极的不起作用?
- lower_bound在 pair<int,int> 的向量上有效,upper_bound不起作用