我在C++编写一个程序来找到所有的解决方案一b = c ^,其中一个,b和c ^一起使用所有的数字0-9只出现一次.该方案在循环值一和b,并且在每次跑了数字计数程序一,b和一个b以检查是否数字的条件感到满意.
然而,当可以产生伪解一个b溢出整数限制.我最终使用以下代码检查:
unsigned long b, c, c_test;
...
c_test=c*b; // Possible overflow
if (c_test/b != c) {/* There has been an overflow*/}
else c=c_test; // No overflow
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来测试溢出?我知道有些芯片有一个内部标志,当溢出发生时会设置,但我从未见过通过C或C++访问它.
请注意,在C和C++中,签名 int溢出是未定义的行为,因此您必须在不实际导致它的情况下检测它.有关添加前的signed int overflow,请参阅在C/C++中检测带符号的溢出
我需要在变量中存储128位长的UUID.C++中是否有128位数据类型?我不需要算术运算,我只是想快速存储和读取值.
C++ 11的一个新功能也可以.
干杯,
我知道你可以用下面的公式得到组合的数量(没有重复,顺序并不重要):
// Choose r from n n! / r!(n - r)!
但是,我不知道如何在C++中实现它,因为例如
n = 52 n! = 8,0658175170943878571660636856404e+67
即使是unsigned __int64(或unsigned long long),这个数字也太大了.是否有一些解决方法来实现公式而没有任何第三方"bigint" - 库?
gcc是否支持amd64上的128位int?
如何定义?
如何使用scanf/printf进行读/写?
对于在32位和64位程序(在Visual C++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么?(如果溢出,我需要结果mod 2 64.)
(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序.)
显然,可以投射到double后面,但是我想知道是否有更准确的方法并不太复杂.(即我不是在寻找任意精度的算术库!)
我想知道是否有任何人可以推荐一个好的轻量级固定大小整数类型(128位甚至256位,甚至可能是模板参数化)库.
我已经看过GMP和co了,他们关心的很好,但是对于我的目的来说有点太大了,我现在对简单的标题解决方案感兴趣.性能很重要,目标架构将是x86和x86-64,也是一个合理的许可证(也就是GPL或LGPL).
我一直在我的代码中使用cstdint中的类型(例如uint32_t),但现在它们并不完全符合我的需求,特别是在模板方面.
有没有办法指定一个两倍于模板参数大小的整数类型?当我的模板传递给uint32_t时,我需要它为函数中的一个变量创建一个uint64_t.也许更难的是,当通过uint64_t时,我需要它来创建一个'uint128_t'.我可以使用两个模板参数的数组来完成此操作,但是我无法将该数组传递给其他模板函数.这是一个性能关键的代码部分(我正在进行密码学).
与此相关,是否有一些其他标头我可以包括(按优先顺序:标准,升压,其他)给我128位整数?看起来这个问题回答了这个特殊的部分:最快的128位整数库
有没有办法指定我想使用不大于特定大小的最大可用整数?该最大尺寸也是sizeof(T)的函数.
我正在使用 Visual Studio 2010 编写 C++/MFC 应用程序,我需要维护一个running total用于计算平均传输率的累积值,如下所示:
//Let's assume that INT128 is a 128-bit integer type
static INT128 iRunningTotal = 0;
static INT128 iCounter = 0;
LONGLONG iteration_get_current_average(LONGLONG iRate)
{
//May be called repeatedly...
iRunningTotal += iRate;
iCounter++;
//Calculate the current average
return iRunningTotal / iCounter;
}
Run Code Online (Sandbox Code Playgroud)
我搜索了C++ 128-bit integer几乎所有人们建议使用 Boost 库的地方。嗯,这是一种可能性,但我不熟悉它,也不会在我的项目中的其他任何地方使用它。
所以除了 Boost,我很好奇,有没有办法用纯 C/C++ 做到这一点?
操作系统:Linux(Debian 10)
CC:GCC 8.3
CPU:i7-5775C
在GCC中有一个unsigned __int128/ __int128,但是有什么办法在GCC中有一个uint256_t/ int256_t?
我读过一篇__m256i似乎来自英特尔的文章。我可以包含任何标头来获取它吗?
它像假设一样有用unsigned __int256吗?我的意思是,如果您可以为其分配/比较,比较,按位运算等。
它的等效符号是什么(如果有)?
编辑1:
我做到了:
#include <immintrin.h>
typedef __m256i uint256_t;
Run Code Online (Sandbox Code Playgroud)
并编译。如果可以进行一些操作,请在此处进行更新。
编辑2:
发现问题:
uint256_t m;
ptrdiff_t l = 5;
m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud)
输出:
error: can’t convert a value of type ‘int’ to vector type ‘__vector(4) long long int’ which has different size
m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud) 我们知道double可以从存储数量±4.94065645841246544e-324来±1.79769313486231570e+308.我们可以存储像IPv6这样的128位值double并按原样检索吗?例如,要存储IPv4,我们可以使用32位整数并将它们存储为8位分区.我们可以通过使用位屏蔽来检索它们.
在任何语言AFAIK中都没有标准容器来存储128位.我知道double可以安全地存储64位而没有任何精度错误,但有任何黑客攻击吗?