相关疑难解决方法(0)

如何避免expr中的溢出.A B C D

我需要计算一个表达式,它看起来像: A*B - C*D,它们的类型是:signed long long int A, B, C, D; 每个数字都可以非常大(不会溢出它的类型).虽然A*B可能导致溢出,但同时表达式A*B - C*D可能非常小.我该如何正确计算?

例如:MAX * MAX - (MAX - 1) * (MAX + 1) == 1,where MAX = LLONG_MAX - n和n - 一些自然数.

c c++ overflow

161
推荐指数
9
解决办法
7762
查看次数

在两个大整数的乘法期间捕获并计算溢出

我正在寻找一种有效(可选的标准,优雅且易于实现)的解决方案来乘以相对较大的数字,并将结果存储为一个或多个整数:

假设我有两个64位整数,如下所示:

uint64_t a = xxx, b = yyy; 
Run Code Online (Sandbox Code Playgroud)

当我这样做时a * b,如何检测操作是否导致溢出,并且在这种情况下将进位存储在某处?

请注意,我不想使用任何大号库,因为我对存储数字的方式有限制.

c integer bit-manipulation overflow multiplication

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

标签 统计

c ×2

overflow ×2

bit-manipulation ×1

c++ ×1

integer ×1

multiplication ×1