在c ++(Linux,不使用boost)。
我有2个64位变量(很长)(比如说x和y)。
当我做x * y时,结果可能是128位。 我该如何存放?是否有一个定义128位的变量?
(我需要128位的特定变量,因为稍后在我的程序中我可以使用" /"对该128位变量进行操作)
感谢' s
答案 0 :(得分:1)
尝试__int128
GCC扩展程序:
#include <cstdio>
int main(void) {
long long a, b, c;
a = 9223372036854775807LL;
b = 3;
c = 5;
__int128 r = (__int128) a * b;
c = r / c;
printf("%lld\n", c); // 5534023222112865484
}
请注意,显式转换是用于乘法(即对于&#34;强制&#34; __int128
类型用于操作数)。只要你有64位目标,就应该这样工作。用例如确认检查结果bc
:
$ echo "9223372036854775807*3/5" | bc
5534023222112865484
你也可以尝试一些仲裁精度库,如GMP
。