问题标签 [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.
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)
你有什么建议吗?
c - 英特尔 C 编译器中支持 +、-、*、/ 和 % 的 128 位整数?
GCC 和 Clang 具有128 位整数运算的__int128_t
和扩展。__uint128_t
我希望能__m128i
为英特尔 C 编译器提供类似的东西,但是(如果可能的话)在我看来,我必须编写显式的 SSE2 函数调用才能使用__m128i
,而不是使用“内置”运算符像+
, -
, *
, /
, 和%
. 我希望做这样的事情(这不起作用):
+
运算符, -
, *
,/
和%
埋在 icc 中的某个地方是否支持 128 位整数?
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 的编译器?
c - Clang 中的 __int128_t 错误?
这段小代码可以同时使用 GCC 和 Clang 编译,但会给出不同的结果:
对于 GCC,这从 10 计数到 1,即预期的行为,而对于 Clang,它会继续计数为负数。使用 Clang,如果我替换test--
为test-=1
then 它也会给出预期的行为。
__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)。
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)?
python - 使用 ctypes 处理 128 位整数
使用 Python ctypes 支持 128 位整数(当前为 __uint128_t)的最佳方式是什么?
可能是两个 uint64_t 的用户定义结构,但这会在需要的地方产生对齐问题。
关于为什么 ctypes 没有扩展到支持 128 位整数的任何想法?
c++ - 如何在 g++ 中打印 __int128?
我在我的 C++ 程序中使用 GCC 内置类型__int128
来处理一些事情,没有什么真正重要的,至少不足以证明仅为此使用 BigInt 库是合理的,但足以防止完全删除它。
当我遇到我的课程的打印部分时,我的问题就出现了,这是一个最小的例子:
注释掉该std::cout
行将使此代码可以很好地编译g++
,但是拥有它会导致以下错误消息:
是的,我知道,很多行解释__int128
只是没有妥善处理......
有没有一种简单的方法可以像任何其他数字类型一样__int128
被打印?iostream
编辑:对于那些仍然混淆 C 和 C++ 的人,是的,我读到了这个问题:如何使用 gcc 打印 __uint128_t 数字?但是,正如我现在所问的那样,这是针对 C 而不是针对 C++ 的。
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 不提供定义这种类型的常量的方法:_u128
forunsigned __int128
和_i128
for __int128
。
减号不是 UDL 的一部分,而是应用于 UDL 结果的一元减号运算符。
因此,对于 a -ddddd_i128
(其中d
是数字),UDL 计算带有正值的带符号 的 a ,然后编译器将对其应用一元减号运算符。到目前为止,一切都很好。__int128
ddddd
问题在于-170…128_i128
(应该是 的有效值__int128
):
UDL 计算的有符号 __int128
正数170…128
刚好在 的范围之外__int128
,导致未定义行为(有符号整数溢出)。
有什么解决方案可以用 UDL 表示这个数字常数吗?
我的 UDL 被声明(现在只是一个非常量的、循环的版本)(它们是原始文字):
一些用法:
我知道有多种方法可以定义常量-170…728
,例如位移、数学运算,但我希望能够以一致的方式创建它,例如我不想要这种情况:您可以使用创建任何常量这个 UDL,除了-170…728_i128
,你必须使用额外的技巧。
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
当然是启用的。
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)以及是否有任何已知的错误。另外,上述哪种解决方案可能是最方便的?