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) все, что я прочитал, в основном говорит, что это экспериментальный и платформо-зависимый. Хотя @Basile предположил, что это должно быть uint128_t
Не могу найти компилятор Intel
, gcc
ни clang
которые поддерживают все, кроме __uint128_t
Вы можете попробовать различные компиляторы на Live Work Space. Это моя попытка на эту проблему.
Что касается 3), может показаться, что нет версии этих потоков, которые поддерживают __uint128_t
так как это экспериментально, возможно, это должно быть удивительно. Эта предыдущая тема Как напечатать номер __uint128_t с помощью GCC? показывает некоторые альтернативы.
Есть ли причина, по которой вы не исследуете некоторые из BigInt библиотеки там?
Других решений пока нет …