相关疑难解决方法(0)

如何检测无符号整数乘法溢出?

我在C++编写一个程序来找到所有的解决方案b = c ^,其中一个,bc ^一起使用所有的数字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++中检测带符号的溢出

c c++ integer-overflow

593
推荐指数
19
解决办法
30万
查看次数

C++中是否有128位整数?

我需要在变量中存储128位长的UUID.C++中是否有128位数据类型?我不需要算术运算,我只是想快速存储和读取值.

C++ 11的一个新功能也可以.

c++ performance uuid types cross-platform

61
推荐指数
6
解决办法
6万
查看次数

计算组合的数量

干杯,

我知道你可以用下面的公式得到组合的数量(没有重复,顺序并不重要):

// Choose r from n

n! / r!(n - r)!

但是,我不知道如何在C++中实现它,因为例如

n = 52

n! = 8,0658175170943878571660636856404e+67

即使是unsigned __int64(或unsigned long long),这个数字也太大了.是否有一些解决方法来实现公式而没有任何第三方"bigint" - 库?

c++ algorithm combinatorics

26
推荐指数
3
解决办法
2万
查看次数

gcc是否支持amd64上的128位int?

gcc是否支持amd64上的128位int?

如何定义?

如何使用scanf/printf进行读/写?

c gcc 128-bit extended-precision

23
推荐指数
2
解决办法
1万
查看次数

最准确的方法是在64位中进行组合乘法除法运算?

对于在32位和64位程序(在Visual C++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么?(如果溢出,我需要结果mod 2 64.)

(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序.)

显然,可以投射到double后面,但是我想知道是否有更准确的方法并不太复杂.(即我不是在寻找任意精度的算术库!)

c c++ math visual-c++

22
推荐指数
2
解决办法
4542
查看次数

C++ 128/256位固定大小的整数类型

我想知道是否有任何人可以推荐一个好的轻量级固定大小整数类型(128位甚至256位,甚至可能是模板参数化)库.

我已经看过GMP和co了,他们关心的很好,但是对于我的目的来说有点太大了,我现在对简单的标题解决方案感兴趣.性能很重要,目标架构将是x86和x86-64,也是一个合理的许可证(也就是GPL或LGPL).

c++ types bigint

11
推荐指数
2
解决办法
1万
查看次数

超出cstdint的数字类型

我一直在我的代码中使用cstdint中的类型(例如uint32_t),但现在它们并不完全符合我的需求,特别是在模板方面.

有没有办法指定一个两倍于模板参数大小的整数类型?当我的模板传递给uint32_t时,我需要它为函数中的一个变量创建一个uint64_t.也许更难的是,当通过uint64_t时,我需要它来创建一个'uint128_t'.我可以使用两个模板参数的数组来完成此操作,但是我无法将该数组传递给其他模板函数.这是一个性能关键的代码部分(我正在进行密码学).

与此相关,是否有一些其他标头我可以包括(按优先顺序:标准,升压,其他)给我128位整数?看起来这个问题回答了这个特殊的部分:最快的128位整数库

有没有办法指定我想使用不大于特定大小的最大可用整数?该最大尺寸也是sizeof(T)的函数.

c++ templates integer c++11

4
推荐指数
1
解决办法
271
查看次数

我可以在 MSVC++ 中使用 128 位整数吗?

我正在使用 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++ 做到这一点?

c++ mfc visual-c++

4
推荐指数
2
解决办法
7781
查看次数

有256位整数类型吗?

操作系统: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)

c gcc types x86-64

2
推荐指数
2
解决办法
1132
查看次数

可以双重用于存储和安全检索128位IPv6吗?

我们知道double可以从存储数量±4.94065645841246544e-324±1.79769313486231570e+308.我们可以存储像IPv6这样的128位值double并按原样检索吗?例如,要存储IPv4,我们可以使用32位整数并将它们存储为8位分区.我们可以通过使用位屏蔽来检索它们.

在任何语言AFAIK中都没有标准容器来存储128位.我知道double可以安全地存储64位而没有任何精度错误,但有任何黑客攻击吗?

c++ double ipv6

0
推荐指数
1
解决办法
166
查看次数