如何在Mac OS X中用Clang指定Float 80(size 10)和Float 128(size 16)?

问题描述 投票:0回答:1

我正在开发一个库,试图以跨平台的方式实现一个扩展的C标准,为此使用了各种默认的编译器。我在处理扩展精度的时候遇到了一个障碍 四倍精度的Mac OS X。

GCC家族的编译器有宏。__float80__float128 为我很好地处理了这个问题,但默认的 Mac OS X clang 编译器似乎没有对应的版本。

版本信息。

Apple clang version 11.0.0 (clang-1100.0.33.16)
Target: x86_64-apple-darwin19.3.0
Thread model: posix

此外,一些测试让我了解到 long double1.0L 在Mac上都默认为Float 128(大小为16)。我知道Float 80是x86定义的,而Swift似乎支持Float 80扩展精度,所以Mac上一定有办法处理它们。不过我找了一大堆,也没找到方法。感谢任何帮助或链接。

c macos floating-point clang primitive
1个回答
1
投票

下图所示的程序在macOS 10.14.6上打印了这个苹果Clang 11.0.0。

长双格式: 在其意义上有64个基数2的数字, 并且有正常的指数从-16382(包括)到16384(不包括)。

这表明它使用的是英特尔80位的格式。long double. 事实是: sizeof 显示为16个字节只是说明80位(10个字节)保存在16个字节的容器中,方便对齐什么的。

#include <float.h>
#include <stdio.h>


int main(void)
{
    printf("The long double format:\n");
    printf("\thas %d base-%d digits in its significand, and\n",
        LDBL_MANT_DIG, FLT_RADIX);
    printf("\thas normal exponents from %d (inclusive) to %d (exclusive).\n",
        LDBL_MIN_EXP-1, LDBL_MAX_EXP);
}
© www.soinside.com 2019 - 2024. All rights reserved.