我需要计算一个表达式,它看起来像:
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 - 一些自然数.
我正在寻找一种有效(可选的标准,优雅且易于实现)的解决方案来乘以相对较大的数字,并将结果存储为一个或多个整数:
假设我有两个64位整数,如下所示:
uint64_t a = xxx, b = yyy;
Run Code Online (Sandbox Code Playgroud)
当我这样做时a * b,如何检测操作是否导致溢出,并且在这种情况下将进位存储在某处?
请注意,我不想使用任何大号库,因为我对存储数字的方式有限制.