gpt4 book ai didi

c - frexp(FLT_MAX, ...) 应该返回什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:53 25 4
gpt4 key购买 nike

下面程序的输出应该是什么?

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

int main() {
int exp;
float mant = frexp(FLT_MAX, &exp);
printf("frexp(%a) = {%f, %d}\n", FLT_MAX, mant, exp);
return 0;
}

在我的带有 glibc 的 amd64 Linux 系统上它打印:

frexp(0x1.fffffep+127) = {1.000000, 128}

来自 the IEEE 754 Wikipedia article我看到“最大归一化数”的指数为 127。我还看到指数为 128 的唯一值是 ±Infinity 和 NaN。

来自 the frexp man page我知道 frexp() 应该返回 [0.5, 1.0) 范围内的值(即不包括 1.0)。

根据这些信息,返回的尾数和指数似乎都不正确。

知道 frexp() 的作用和 FLT_MAX 的值 (= (2 - 2^-23) * 2^127) 告诉我 {1.0, 128} 确实非常接近正确答案,因为 (2 - 2^-23) 非常接近 2。

那么 frexp(FLT_MAX, ...) 应该返回什么?

最佳答案

我感谢您以 %a 格式打印出 FLT_MAX,因此您可以看到实际值是什么,而不是 %f 将其打印为。那么为什么不对 mant 的值也这样做呢?

frexp(0x1.fffffep+127) = {0x1.fffffep-1, 128}

这个结果对我来说似乎不足为奇。 (请注意,IEEE-754 表示中的指数基于 [1.0, 2.0) 范围内的尾数,而 frexp 生成 范围内的尾数[0.5, 1.0)。所以 frexp 最大指数高了一个。)

道德:永远不要混淆浮点值是什么和它的外观

关于c - frexp(FLT_MAX, ...) 应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18284722/

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