问题标签 [int128]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4596 浏览

c++ - Linux 上的 int128 用于 Intel 编译器

Linux 2.6.32

Intel编译器:icpc 13.0.1版(gcc 4.4.6版兼容)

输出:16

所以,类型__uint128_t存在。
但是,使用__uint128_t会产生编译和运行错误。

程式:

汇编:

icpc int01.cpp

/usr/include/c++/4.4.6/c++0x_warning.h(31):灾难性错误:#error 指令:此文件需要编译器和库支持即将推出的 ISO C++ 标准 C++0x。此支持目前是实验性的,必须使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。#error 此文件需要编译器和库支持,以支持即将推出的 \ ^

int01.cpp 的编译中止(代码 4)

icpc int01.cpp -std=c++0x

int01.cpp(4):错误:标识符“uint128_t”未定义 uint128_t val128 = 0; ^

int01.cpp 的编译中止(代码 2)

icpc int02.cpp -std=c++0x

// 没有错误

icpc int03.cpp -std=c++0x

int03.cpp(6):错误:多个运算符“<<”匹配这些操作数:

int03.cpp 的编译中止(代码 2)

你有什么建议吗?

0 投票
1 回答
4342 浏览

c - 英特尔 C 编译器中支持 +、-、*、/ 和 % 的 128 位整数?

GCC 和 Clang 具有128 位整数运算的__int128_t和扩展。__uint128_t

我希望__m128i为英特尔 C 编译器提供类似的东西,但是(如果可能的话)在我看来,我必须编写显式的 SSE2 函数调用才能使用__m128i,而不是使用“内置”运算符像+, -, *, /, 和%. 我希望做这样的事情(这不起作用):

+运算符, -, *,/%埋在 icc 中的某个地方是否支持 128 位整数?

0 投票
1 回答
457 浏览

c - Linux 的 GCC 替代方案,支持 OpenMP 和带 +、-、*、/ 和 % 的 128 位整数

我有一个使用 OpenMP 和 128 位整数的 C 代码。对于 128 位整数,我使用 GCC 提供的 __int128_t 和 __uint128_t 扩展。我正在寻找任何其他也可以编译这种代码的编译器。

Clang 支持 __uint128_t,但不支持 OpenMP。ICC 支持 OpenMP,但不支持 128 位整数(至少不能使用内置运算符,如 +、-、*、/ 和 %)Portland Group C 编译器本身并不支持 128 位算术。

为了清楚起见,我正在寻找类似于 __int128_t 的 128 位整数,它可以作为“普通”整数的替代品。除了支持 OpenMP 和 128 位整数以及内置运算符 +、-、*、/ 和 % 的 GCC 之外,是否有任何适用于 Linux 的编译器?

0 投票
1 回答
3426 浏览

c - Clang 中的 __int128_t 错误?

这段小代码可以同时使用 GCC 和 Clang 编译,但会给出不同的结果:

对于 GCC,这从 10 计数到 1,即预期的行为,而对于 Clang,它会继续计数为负数。使用 Clang,如果我替换test--test-=1then 它也会给出预期的行为。

__int128_t 是 GCC 扩展,所以上述结果只适用于非标准 C,所以可能 __int128_t 在 Clang 中是“使用风险自负”。

这是 Clang 中的错误,还是我犯了一些我没有看到的错误?

编辑:我正在使用 gcc (MacPorts gcc48 4.8-20130411_0) 4.8.1 20130411 (prerelease) 和 Apple clang 4.0 (tags/Apple/clang-421.0.60) (基于 LLVM 3.1svn)。

0 投票
3 回答
4242 浏览

c - Is __int128_t arithmetic emulated by GCC, even with SSE?

I've heard that the 128-bit integer data-types like __int128_t provided by GCC are emulated and therefore slow. However, I understand that the various SSE instruction sets (SSE, SSE2, ..., AVX) introduced at least some instructions for 128-bit registers. I don't know very much about SSE or assembly / machine code, so I was wondering if someone could explain to me whether arithmetic with __int128_t is emulated or not using modern versions of GCC.

The reason I'm asking this is because I'm wondering if it makes sense to expect big differences in __int128_t performance between different versions of GCC, depending on what SSE instructions are taken advantage of.

So, what parts of __int128_t arithmetic are emulated by GCC, and what parts are implemented with SSE instructions (if any)?

0 投票
1 回答
3324 浏览

python - 使用 ctypes 处理 128 位整数

使用 Python ctypes 支持 128 位整数(当前为 __uint128_t)的最佳方式是什么?

可能是两个 uint64_t 的用户定义结构,但这会在需要的地方产生对齐问题。

关于为什么 ctypes 没有扩展到支持 128 位整数的任何想法?

0 投票
6 回答
44747 浏览

c++ - 如何在 g++ 中打印 __int128?

我在我的 C++ 程序中使用 GCC 内置类型__int128来处理一些事情,没有什么真正重要的,至少不足以证明仅为此使用 BigInt 库是合理的,但足以防止完全删除它。

当我遇到我的课程的打印部分时,我的问题就出现了,这是一个最小的例子:

注释掉该std::cout行将使此代码可以很好地编译g++,但是拥有它会导致以下错误消息:

是的,我知道,很多行解释__int128只是没有妥善处理......

有没有一种简单的方法可以像任何其他数字类型一样__int128被打印?iostream

编辑:对于那些仍然混淆 C 和 C++ 的人,是的,我读到了这个问题:如何使用 gcc 打印 __uint128_t 数字?但是,正如我现在所问的那样,这是针对 C 而不是针对 C++ 的。

0 投票
1 回答
643 浏览

c++ - __int128 @ min 负值的 UDL(用户定义文字)整数溢出

为了清楚和简单起见,我将以下数字缩短如下:

  • −170,141,183,460,469,231,731,687,303,715,884,105,728作为-170…728
  • 170,141,183,460,469,231,731,687,303,715,884,105,727作为170…727

gcc这些数字表示 128 位有符号整数 (__int128 in )的最小值和最大值。

我为这种数据类型实现了用户定义的文字(原始文字),因为 gcc 不提供定义这种类型的常量的方法:_u128forunsigned __int128_i128for __int128

减号不是 UDL 的一部分,而是应用于 UDL 结果的一元减号运算符。

因此,对于 a -ddddd_i128(其中d是数字),UDL 计算带有正值的带符号 的 a ,然后编译器将对其应用一元减号运算符。到目前为止,一切都很好。__int128ddddd

问题在于-170…128_i128(应该是 的有效值__int128):
UDL 计算的有符号 __int128正数170…128刚好在 的范围之外__int128,导致未定义行为(有符号整数溢出)。

有什么解决方案可以用 UDL 表示这个数字常数吗?


我的 UDL 被声明(现在只是一个非常量的、循环的版本)(它们是原始文字):

一些用法:


我知道有多种方法可以定义常量-170…728,例如位移、数学运算,但我希望能够以一致的方式创建它,例如我不想要这种情况:您可以使用创建任何常量这个 UDL,除了-170…728_i128,你必须使用额外的技巧。

0 投票
1 回答
950 浏览

android-ndk - 有没有办法将 __int128_t 与 Android NDK 一起使用?

有没有办法将 __int128_t 与 Android NDK 一起使用?

我尝试使用 GNU 工具链 4.9,但无论我如何尝试,我都会收到以下错误: error: '__int128_t' was not declared in this scope

-std=gnu++11当然是启用的。

0 投票
3 回答
8774 浏览

c++ - 存储 IPv4/IPv6 地址的有效方法

我正在开发一个 C/C++ 网络项目,它应该能够同时使用 IPv4 和 IPv6 网络堆栈。该项目仅适用于 Linux。因此,我试图找到一种有效的方法来存储 IP 地址并区分协议系列。第一种方法是建立一个工会:

第二种方法是定义一个`typedef std::vector IPAddressNumber`并在向量的字节数之后产生差异。

第三种方法是使用 gcc 中的 int128_t/uint128_t 或 __int128_t。

对于最后一种情况,我想知道这些类型是从哪个 GCC 版本支持的,针对哪些平台(尤其是 IA-32/IA-64)以及是否有任何已知的错误。另外,上述哪种解决方案可能是最方便的?