浮点数
来源:互联网 发布:服装设计图纸软件 编辑:程序博客网 时间:2024/04/29 14:53
不知道你们是不是也遇到过这样的情况,本来理解的很好的一个知识点被不同的人讲就是不同的理解,我就遇到了这样的情况之前听过一个老师讲浮点数如下图
但是他讲的是错的阶乘根本没有符号位,根据一个叫IEEE754的标准来说阶乘位从符号位后的第一位算起 8位[float型] (11位[double型])应该是通过+127(或+1023)来实现的,而且这8位(11位)是unsigned int取值范围在0~255(如果是11位取值范围就是0~2047),即使出现负数也会被加成正的。所以他正确的表达式应该是
V = (-1)^s * M * 2^E (s是符号、M是尾数、E是阶乘)
(1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
(2)M表示有效数字,1 <= M < 2。
(3)2^E表示指数位。E可为负。
这是往计算机里存时的状态,从计算机中读取的时候规则也都差不多。
1》E不全为0或不全为1。这时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。
下面还有更复杂的情况:
2》E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
3》E全为1。这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。
下面有一段代码大家猜猜它的答案:
#include<stdio.h>int main(){ int num = 9; float *pfloat = (float *)&num printf("num = %d\n",num); printf("*pfloat = %f\n",*pfloat); *pfloat = 9.0; printf("num = %d\n",num); printf("*pfloat = %f\n",*pfloat); return 0; }num = 9
*pfloat = 0.000 000
num = 1091517616
*pfloat = 9.000 000
这样是不是就可以理解了
0 0
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- 浮点数
- JavaScript 程序设计基础(01) -- 创建对象的方式
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
- 第五届在线编程大赛月赛第一题:完全平方数的个数
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
- UVA - 1474(Evacuation Plan 动态规划中用其他状态优化自己,背包式优化)
- 浮点数
- 剑指offer 33 把数组排成最小的数
- 轻松实现JavaBeans到XML的相互转换
- 『ANDROID』eclipse_xml插件、跳转至wifi设置页面、几种dialog等等
- ruby学习笔记 类中的变量
- Android Launcher桌面图标显示数字
- 谈谈对攻读计算机研究生的看法
- eclipse,myeclipse中为导入的jar包添加源文件,可以直接查看源文件
- 从头认识C—数组传给函数注意点