首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么应该是frexp(FLT_MAX,.)回来?

什么应该是frexp(FLT_MAX,.)回来?
EN

Stack Overflow用户
提问于 2013-08-17 03:04:22
回答 1查看 403关注 0票数 0

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

代码语言:javascript
复制
#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系统上,它打印:

代码语言:javascript
复制
frexp(0x1.fffffep+127) = {1.000000, 128}

IEEE 754维基百科文章中我看到“最大归一化数”的指数为127。我还发现,指数为128的唯一值是±无穷大和NaN。

frexp手册页中我了解到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,.)回来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-17 05:43:44

我给您提供了以FLT_MAX格式打印%a格式的信誉,这样您就可以看到实际值是什么,而不是%f打印的值。那么,为什么不也为mant的价值这么做呢?

代码语言:javascript
复制
frexp(0x1.fffffep+127) = {0x1.fffffep-1, 128}

这个结果在我看来并不令人惊讶。(请注意,IEEE-754表示中的指数基于范围[1.0, 2.0)中的尾数,而frexp在范围[0.5, 1.0)中生成尾数。因此,frexp最大指数更高。)

寓意:永远不要混淆浮点值和它的外观。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18284722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档