【问题标题】:128 bits variable operations [duplicate]128位变量操作[重复]
【发布时间】:2014-07-31 15:51:41
【问题描述】:

在 c++ 中(Linux,不使用 boost)。

我有 2 个 64 位变量(long long)(比如 x 和 y)。

当我在做 x*y 时,结果可能是 128 位。 我该如何存储它?是否有定义 128 位的变量?

(我需要一个 128 位的特定变量,因为稍后在我的程序中我可能会对该 128 位变量使用“/”操作)

谢谢

【问题讨论】:

  • 使用双打怎么样?
  • 应该有一些“无限精度”(或“扩展精度”)包浮动,允许整数(和浮点数)比硬件和本地语言支持更宽。它是软件仿真,所以速度很慢,而且你可能没有那么大的文字。
  • 看起来 GCC 仍然有一个 int128_t,据我所知应该可以工作。
  • 你在做什么需要超过 64 位整数?查看gmplib.org

标签: c++ 128-bit


【解决方案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
}

请注意,乘法需要显式强制转换(即“强制”__int128 操作数类型)。只要您有 64 位目标,它就应该以这种方式工作。要确认检查您的结果,例如bc:

$ echo "9223372036854775807*3/5" | bc
5534023222112865484

您也可以尝试一些任意精度库,例如 GMP

【讨论】:

猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 2010-12-31
  • 2018-04-21
  • 1970-01-01
  • 2021-06-26
  • 2016-12-31
  • 2012-08-06
  • 2016-02-03
相关资源
最近更新 更多