gpt4 book ai didi

c - 如何在 C 中打印最大可能的 float 和 double ?

转载 作者:行者123 更新时间:2023-12-02 05:48:44 32 4
gpt4 key购买 nike

对于以下代码,

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

int main(void) {
printf("double max = %??\n", DBL_MAX);
printf("double min = %??\n", DBL_MIN);
printf("double epsilon = %??\n", DBL_EPSILON);
printf("float epsilon = %??\n", FLT_EPSILON);
printf("float max = %??\n", FLT_MAX);
printf("float min = %??\n\n", FLT_MIN);
return 0;
}

为了让 printf 将各种数量显示为适当大小的十进制数字,我必须使用什么说明符来代替 ?? ?

最佳答案

使用与这些类型的任何其他值相同的格式:

#include <float.h>
#include <stdio.h>
int main(void) {
printf("FLT_MAX = %g\n", FLT_MAX);
printf("DBL_MAX = %g\n", DBL_MAX);
printf("LDBL_MAX = %Lg\n", LDBL_MAX);
}

对于 printf 等可变参数函数,float 类型的参数将提升为 double,这就是为什么您对两者使用相同格式的原因。

%f 使用不带指数的十进制表示法打印浮点值,对于非常大的值,这将为您提供非常长的(大多数是微不足道的)数字字符串。

%e 强制使用指数。

%g 使用 %f%e,具体取决于要打印的数字的大小。

在我的系统上,上面打印以下内容:

FLT_MAX = 3.40282e+38
DBL_MAX = 1.79769e+308
LDBL_MAX = 1.18973e+4932

正如 Eric Postpischil 在评论中指出的那样,上面仅打印值的近似值。您可以通过指定精度来打印更多位数(您需要的位数取决于类型的精度);例如,您可以将 %g 替换为 %.20g

或者,如果您的实现支持它,C99 添加了以所需的精度以十六进制打印浮点值的功能:

printf("FLT_MAX = %a\n", FLT_MAX);
printf("DBL_MAX = %a\n", DBL_MAX);
printf("LDBL_MAX = %La\n", LDBL_MAX);

但是结果不像通常的十进制格式那样容易被人类阅读:

FLT_MAX = 0x1.fffffep+127
DBL_MAX = 0x1.fffffffffffffp+1023
LDBL_MAX = 0xf.fffffffffffffffp+16380

(注意:main() 是一个过时的定义;请使用 int main(void) 代替。)

关于c - 如何在 C 中打印最大可能的 float 和 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18797400/

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