gpt4 book ai didi

c - c中有多少种浮点类型?

转载 作者:行者123 更新时间:2023-12-05 08:45:13 26 4
gpt4 key购买 nike

许多程序员都知道 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__*
还有其他我不知道的浮点类型吗?

最佳答案

只有3 real floating-point types在 C23 之前的 C 中:floatdoublelong double,它们可以使用任意基数作为有效数字,如十进制或八进制,尽管现在最有可能二进制。一些较旧的系统使用 hexadecimal floating-point types .每个真正的 float 类型都可以与 _Complex_Imaginary 关键字组合,以创建复杂的 float 类型

C23添加 3 more real floating-point types : _Decimal32, _Decimal64, _Decimal128, 都是十进制类型

您看到的任何其他内容都是编译器扩展内部编译器。这些将以 __ 为前缀,因为以双下划线开头的标识符保留用于实现__mingw_printf__DBL_MAX____DEC64_MAX__...都是内部实现,您不应该直接使用它们。使用 FLT_MAX 而不是 __FLT_MAX__

事实上在C23之前GCC中有一个十进制浮点扩展

As an extension, GNU C supports decimal floating types as defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal floating types in GCC will evolve as the draft technical report changes. Calling conventions for any target might also change. Not all targets support decimal floating types.

The decimal floating types are _Decimal32, _Decimal64, and _Decimal128. They use a radix of ten, unlike the floating types float, double, and long double whose radix is not specified by the C standard but is usually two.

6.14 Decimal Floating Types

由于mingw是GCC移植的,所以也支持那个十进制浮点扩展。通常在 float.h 中,标准常量将被定义为特定于实现的常量,例如

#define LDBL_MAX   __LDBL_MAX__
#define DEC128_MAX __DEC128_MAX__

关于c - c中有多少种浮点类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73509077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com