关于float类型能表示的最大值与精度问题 - 爱问答

(爱问答)

关于float类型能表示的最大值与精度问题

float类型能表达的最大值为 (2-2^(-23))2^(127)即为340282346638528860000000000000000000000

通过下面这段代码也能得到这个数

#include<stdio.h>

int main(int argc, char* argv[])  

     float a=-8.25; 

     char *p=(char*)&a; 

     *p=0xff;  

     *(p+1)=0xff;

     *(p+2)=0x7f;

     *(p+3)=0x7f;

     printf(" &a=%x",&a); 

     printf(" a=%f",a); 

   }  

但是直接将这个数赋给一个float类型变量再打印出来的结果却是不一样的

(将这个数转化为二进制得到11111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

有24个1和104个0共128位即1.11111111111111111111111*2^127

尾数部分应该是没有超出存储限制的

那么为什么会不一样呢?

首先,你最基本的概念就错了.

float是8个字节,也就是64位而非你认为的128位的(这个是double的范围)

而你程序中的指针p只用了4*8=32位

且内容也是错的,你的p的最终为

  ff               ff              7f               7f

对应的二进制为

11111111 11111111 01111111 01111111

完全不对啊

你自己细细看下

并参考下IEEE754资料吧

(float最大为 3.40X10^38,你的第一个还多了一位)


下一篇:荒野行动电脑版键位会更换吗?

上一篇:YUNOS可以适配荣耀6P吗

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?