gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:27 25 4
gpt4 key购买 nike

Linux 2.6.32

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

#include <iostream>
#include <sys/types.h>
int main()
{
std::cerr << sizeof (__uint128_t) << std::endl;
return 0;
}

输出:16

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

程序:

// File int01.cpp
#include <cstdint>
int main()
{
uint128_t val128 = 0;
return 0;
}


// File int02.cpp
#include <cstdint>
int main()
{
__uint128_t val128 = 0;
return 0;
}


// File int03.cpp
#include <iostream>
#include <cstdint>
int main()
{
__uint128_t val128 = 0;
std::cerr << val128 << std::endl;
return 0;
}

编译:

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): 错误:多个运算符“<<”匹配这些操作数:

        function "std::basic_ostream<_CharT, _Traits>::operator<<(long) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned long) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(short) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned short) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(long long) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned long long) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT=char, _Traits=std::char_traits<char>]"
function "std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT=char, _Traits=std::char_traits<char>]"
operand types are: std::ostream << __uint128_t
std::cerr << val128 << std::endl;
^

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

你有什么建议吗?

最佳答案

至于 1) 和 2),我读到的所有内容基本上都说这是 experimental and platform dependent 。虽然@Basile建议它应该是 uint128_t我找不到编译器Intel , gcc也不clang支持除 __uint128_t 以外的任何内容,您可以在 Live Work Space 尝试各种编译器。这是my attempt在这个问题上。

至于 3),这些流似乎没有版本支持 __uint128_t因为它是实验性的,也许这应该令人惊讶。上一个线程 how to print __uint128_t number using gcc?显示了一些替代方案。

您有什么理由不探索 Bigint 中的一些内容吗?那里有图书馆?

关于c++ - Linux 上的 int128 用于 Intel 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com