【问题标题】:What are the requirements to use __float128?使用 __float128 有什么要求?
【发布时间】:2021-02-04 16:13:44
【问题描述】:

我不确定如何从系统中找出是否支持__float128 类型。必须满足哪些系统要求才能使其可用,有没有办法检查 C 代码中是否满足这些要求? (供参考,我的系统支持__int128,但不支持__float128。)

【问题讨论】:

  • 以下划线开头的任何内容都将是编译器特定的且不可移植的。它更像是一个编译器而不是系统问题(或者可能两者兼而有之)。
  • 啊,好吧。不过,我关于检测这一点的问题仍然存在。
  • 当您说要“检测”它时,您能详细说明一下吗?在配置脚本或类似文件中检测它?通过使用预处理器宏?还有什么办法? “检测”这样的事情更多地取决于您的环境以及您如何配置和构建项目。
  • 预处理器宏。
  • 正如the answer by Eric Postpischil 中提到的,单独使用预处理器宏可能是不可能的。如果您有某种配置脚本或项目生成器(例如 GNU Autotools 或 CMake 或类似的),那么您可以要求脚本检查类型。否则可能无法可靠地检测其可用性。

标签: c floating-point


【解决方案1】:

假设你问的是 GCC,clause 6.12 of the documentation for GCC 10.2 说:

__float128 可用于 i386、x86_64、IA-64 和 hppa HP-UX,以及启用矢量标量 (VSX) 指令集的 PowerPC GNU/Linux 目标。 __float128 支持 128 位浮点类型。在 i386、x86_64、PowerPC 和 IA-64 而非 HP-UX 上,__float128_Float128 的别名。在 hppa 和 IA-64 HP-UX 上,__float128long double 的别名……

和:

... 为了在 PowerPC Linux 系统上使用 _Float128__float128__ibm128,您必须使用 -mfloat128 选项。预计在未来的 GCC 版本中,_Float128__float128 将自动启用……

我没有看到该类型的源内测试,例如可以指示它的预处理器宏。

【讨论】:

  • 嗯,运行uname -m给我x86_64,所以理论上我的系统应该支持它?
  • 除非我不理解某些东西(这可能是真的),否则我的系统应该是兼容的,即使它不是。
  • @fluffyyboii:你的编译器版本是什么?
  • Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 10.0.0 (clang-1000.10.44.4) Target: x86_64-apple-darwin17.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • @fluffyyboii:我在the Clang documentation 中没有看到提到__float128
猜你喜欢
  • 2021-12-12
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
相关资源
最近更新 更多