一. float 存储方式

1.1. float 占四个字节

1.2. 浮点数构成

1.2.1. 无论是单精度还是双精度在存储中都分为三个部分:

<1>. 符号位(Sign) : 0代表正,1代表为负

<2>. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储(范围-127-128)

<3>. 尾数部分(Mantissa):尾数部分

a. 其中float的存储方式如下图所示:

b. 而双精度的存储方式为:

二. 浮点数计算方式

2.1. 比如8.25用十进制的科学计数法表示就为:8.25*,而120.5可以表示为:1.205*,这些小学的知识就不用多说了吧。

但计算机只认识0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,(我靠,不会连这都不会转换吧?那我估计要没辙了。小数点左边表示,右边是)。120.5用二进制表示为:1110110.1用二进制的科学计数法表示1000.01可以表示为1.0001*,1110110.1可以表示为1.1101101*,任何一个数都的科学计数法表示都为1.xxx*,尾数部分就可以表示为xxxx,第一位都是1嘛,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中真正的存储方式。

2.2. 看下8.25,用二进制的科学计数法表示为:1.0001*

2.2.1. 按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130(至于为啥加127看后面) ,位数部分为,故8.25的存储方式如下图所示

2.2.2. 单精度浮点数120.5的存储方式如下图所示:

三. 为啥加127

3.1.

3.1. 上面的例子中,我们知道E代表的是幂的大小,而存入计算机的e则为E+127,那么问题来了,这里为什么要加上127这个数呢?

<1>.

<2>. 其实,也就是说:计算机表示单精度浮点数时,是用8位去存储指数部分,在数值上面,表示0~255,但是我们同样需要有负指数,正负指数的位数量为了均等,各自一半,-127~128,0是特殊点,特殊处理。储存时候会加上127,这样就刚刚好是0~255,就能很好的储存了,不然的话,需要判断符号位来判断数值的正负(计算机把指数拿去-127就可以得到正负)

面试题:

请写出float x 与“零值”比较的if语句

答案:

const float EPSINON = 0.00001;

if((x>=-EPSINON)&&(x<=EPSINON));

关于float的小奥秘的更多相关文章

  1. 关于CSS中的float可能出现的小问题

    关于CSS中的float可能出现的小问题 前言:最近学习CSS的float所遇到点小问题,然后顺便分享给大家. 一.什么是CSS以及float (一) CSS概述 CSS是层叠样式表(英文全称:Cas ...

  2. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  3. what is difference in (int)a,(int&)a,&a,int(&a) ?

    This interview question come from a famous communication firm of china. : ) #include <iostream> ...

  4. js实现省市区联动

    先来看看效果图吧,嘻嘻~~~~~~~~~~~~~~~~~~~· 代码在下面: 示例一: html: <!DOCTYPE html> <html> <head> &l ...

  5. Launcher知识的demo,手机管家小伙家与悬浮窗

    Launcher知识的demo.主要仿的手机管家小伙家与悬浮窗的效果.东西比較简单.直接贴代码 主要用到了windowManager 中的更新updateViewLayout(view,params) ...

  6. 2、原生js实现轮播图特效

    很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是怎样的呢?本人是一枚菜鸟,这篇文章就当做 ...

  7. mysql的char,varchar,text,blob

    mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个 ...

  8. Android,TextView的所有属性和方法

    XML 属性 属性名称 相关方法 描述 android:autoLink setAutoLinkMask(int) 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接. ...

  9. 3-3 浮点型字面量 & 3-4浮点型案例

    双精度的浮点类型,末尾加d或者D 3-4浮点型案例 如果一个浮点类型的末尾什么也不写 他表示就是一个double类型的.所以这里定义报错了. float f=1234.328; 把一个范围大的数赋值给 ...

随机推荐

  1. 任务Task、先后任务

    Task类似后台线程. using System; using System.Threading; using System.Threading.Tasks;//引用命名空间 namespace Co ...

  2. jquery keypress() 方法 语法

    jquery keypress() 方法 语法 作用:keypress 事件与 keydown 事件类似.当按钮被按下时,会发生该事件.它发生在当前获得焦点的元素上.不过,与 keydown 事件不同 ...

  3. jquery attribute$=value选择器 语法

    jquery attribute$=value选择器 语法 作用:[attribute$=value] 选择器选取每个带有指定属性且以指定字符串结尾的元素. 语法:$("[attribute ...

  4. 直接选择排序(Straight Selection Sort)

    1.定义 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕. 常用的选择排序方法有直接选择排序和堆 ...

  5. javascript中的原型和原型链(二)

    原型(prototype) 函数的 prototype 属性(图) 每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象) 原型对象中有一个属性construct ...

  6. https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入后如何添加到自己的项目

    将 https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入到界面后,如何将这个项目添加到自己的项目里面. 然后再自 ...

  7. VS Code 最好用的 Markdown 插件

    对经常使用 Markdown 写东西的工程师来说找到称手好用的 Markdown 编辑器非常重要. 目前为止 VS Code 最好用的插件是 Markdown Preview Enhanced . 各 ...

  8. Override和Overload的含义与区别

    overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制. 是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段).  override是重写,重写是一种 ...

  9. 快速排序和二分查找(Java)

    import java.util.Arrays; public class Main { public static void main(String[] args) { int[] data = { ...

  10. 移动端 iphone手机在中文情况下不执行keyup事件

    问题:移动端 在