【发布时间】:2018-12-28 14:02:48
【问题描述】:
GCC 为固定宽度的浮点数提供 _Float32 和 _Float64。
但是,这些不是标准的,并且在 clang 中不存在。我也找不到 clang 的等价物。
某些平台可以将浮点或双精度定义为不是 32 位或 64 位,因此不能选择使用这些类型。
【问题讨论】:
-
您想要解决的真正问题是什么?为什么要使用非标准类型?除非您实际上明确地针对浮点类型具有异常大小的平台,否则为这样的平台构建代码的可能性微乎其微。
-
@Someprogrammerdude:固定格式类型确实有明显的好处,所以我们不需要 OP 来回答这些问题来解决这个问题。拥有固定格式的类型使我们能够减少平台之间程序的差异。工程原理从规范中得出断言的结果,这意味着我们说程序将以某种方式运行因为它使用的事物的文档为我们提供了某些保证。依赖某事发生的“机会”不是工程。
-
另一方面,类型的宽度仅仅是一个足够的规范,还是应该是例如 IEEE-754 32 位浮点数?是否有一个提供 IEEE-754 32 位浮点数的平台,但它不是
float,并且仍然可以使用(该类型的软件仿真可能不是)?在我看来,如果类型的确切规格很重要,则应在预编译步骤中确定合适的类型。 (话虽如此,我不知道 GCC 的_Float32是否被定义得更具体,而不仅仅是 32 位大小。) -
@EricPostpischil,确实可以从显式宽度类型中获得真正的好处,但这并不能消除 Some 的问题,因为我们不知道 OP 实际上是否正在寻找其中的任何一个特别的好处。由于确实没有任何标准的显式宽度浮点类型,因此了解 OP 试图实现什么以提出适当的替代方案很有用。
-
而另一种可能是该程序依赖于
double和float分别以 IEEE 754 二进制 64 位和 32 位浮点格式表示,并且文档作为对其运行的实现的要求。