正如许多程序员所知道的那样,C语言中有几种浮点类型.到目前为止,我知道floatdoublelong double,但我不太确定它们是否都是浮点类型,因为我找到了几个类似__DEC32_MAX__的定义.起初我以为这是__FLT_MAX__的另一个名字,但当我试图打印它时,我意识到它是不同的(如下所示):

#include <stdio.h>

void main(void)
{
    __mingw_printf("flt    value: %e, size: %d\n", __FLT_MAX__, sizeof(__FLT_MAX__));
    __mingw_printf("dbl    value: %e, size: %d\n", __DBL_MAX__, sizeof(__DBL_MAX__));
    __mingw_printf("ldbl   value: %e, size: %d\n", __LDBL_MAX__, sizeof(__LDBL_MAX__));
    __mingw_printf("dec32  value: %e, size: %d\n", __DEC32_MAX__, sizeof(__DEC32_MAX__));
    __mingw_printf("dec64  value: %e, size: %d\n", __DEC64_MAX__, sizeof(__DEC64_MAX__));
    __mingw_printf("dec128 value: %e, size: %d\n", __DEC128_MAX__, sizeof(__DEC128_MAX__));
}

/* output:
flt    value: 3.402823e+038, size: 4
dbl    value: 1.797693e+308, size: 8
ldbl   value: 3.237664e-317, size: 16
dec32  value: 9.944455e-315, size: 4
dec64  value: 9.089022e+269, size: 8
dec128 value: 3.237656e-317, size: 16
*/

什么是__DEC__* s?
有没有其他我不知道的浮点类型?

推荐答案

一些特定用途需要较小的浮点数,如:float8float16bifloat.它主要用于DSP、AI和图形应用程序.许多硬件体系 struct 至少支持其中的一部分(例如,Biblloat AVX-512 BF16、ARM-V8.8、AMD ROCM、CUDA等).

还有一些大的浮点格式,比如Float128.硬件示例:PowerPC中的VSX.

标准C不直接支持这些浮点数.一些编译器支持将其作为扩展.

C++相关问答推荐

如何从TPS特定的TGPT_PUBLIC数据 struct 中以OpenSSL的EVP_PKEY

如何将FileFilter添加到FileDialog GTK 4

为什么下面的C代码会进入无限循环?

getchar读css + z还是返回css?

在C语言中使用scanf()时我无法理解的警告

如何在C中从函数返回指向数组的指针?

在传统操作系统上可以在虚拟0x0写入吗?

以下声明和定义之间的区别

从uint8_t*转换为char*可接受

S的这种管道实施有什么问题吗?

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

如何在VSCode中创建和使用我自己的C库?

C中的回文数字

如何修复我的qsort()算法?它每次都给出不同的结果

计算SIZE_MAX元素的长数组的大小

发送和接收的消息中的Unix域套接字不匹配

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

尽管将其标记为易失性,但 gcc 是否优化了我的等待代码?

使用共享变量同步多线程 C 中的函数

为什么需要struct in_addr