参考或转自http://topic.csdn.net/u/20090716/10/CE4A7037-3C0D-40AE-AF85-F702C78FCEA3.html

单精度浮点数在机内占4个字节,用32位二进制描述。

双精度浮点数在机内占8个字节,用64位二进制描述。

浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。

指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

=======================================================================================

类型 比特数 有效数字 数值范围 
float 32 6-7 -3.4*10(-38)~3.4*10(38) 
double 64 15-16 -1.7*10(-308)~1.7*10(308) 
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932) 
简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件) 
还有,有个例子:在C和C++中,如下赋值语句 
float a=0.1; 
编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float ' 
原因: 
在C/C++中(也不知道是不是就在VC++中这样),上述语句等号右边0.1,我们以为它是个float,但是编译器却把它认为是个double(因为小数默认是double),所以要报这个warning,一般改成0.1f就没事了。 
本人通常的做法,经常使用double,而不喜欢使用float。

C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范 的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

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

  1. 符号位(Sign) : 0代表正,1代表为负
  2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
  3. 尾数部分(Mantissa):尾数部分

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

float与double类型区别比较相关推荐

  1. float和double的区别

    float和double的区别 两者的主要区别如下: 1.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 2.有效数字位数不同 单精度浮点数有效数字8位 双精 ...

  2. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...

    float和double类型的数据在编程时的需要注意的地方 package execisetest; public class AccuranceTest {     public static vo ...

  3. decimal,float和double的区别

    一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 Name CTS Type De script ion Significan ...

  4. 深入理解C++浮点数(float、double)类型数据比较、相等判断

    深入理解C++浮点数(float.double)类型数据比较.相等判断 浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾 ...

  5. mysql double 存储_关于MYSQL中FLOAT和DOUBLE类型的存储-阿里云开发者社区

    关于MYSQL中FLOAT和DOUBLE类型的存储 重庆八怪 2016-04-12 844浏览量 简介: 关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方 ...

  6. 关于MYSQL中FLOAT和DOUBLE类型的存储

    关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方式和C/C++一致准守IEEE标准他们都是浮点型的,所谓的浮点型,是小数点的位置可变,其能够表示的范围比定 ...

  7. JAVA中的float和double的区别

    1.两个在定义时的区别 1)float型 内存分配4个字节,占32位,范围从10^-38到10^38 和 -10^38到-10^-38         例float x=123.456f,y=2e20 ...

  8. 基本数据类型float和double的区别

    float : 单精度浮点数 double : 双精度浮点数 两者的主要区别如下: 01.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02.有效数字位数不 ...

  9. Java入门之7:Java中的float和double类型的浮点数是怎么按照IEEE 754标准存储的?

    前言: 这篇博文,我写了好几天--,里面涉及的基础概念比较多,内容比较多,举例也比较多,想搞清楚明白就难免 我自己都会觉得啰嗦,我整理了目录出来,看完需要一点时间,可以自行根据需要.感兴趣的 选择阅读 ...

最新文章

  1. MindSpore:自动微分
  2. 现浇板弹性计算还是塑性计算,板塑性和弹性
  3. 东农计算机应用与技术离线作业,东农16春《计算机应用与技术》在线作业.doc
  4. Excel35招必学秘技
  5. python显示安装失败_关于python:安装失败并显示Requirements.txt,但可用于pip安装...
  6. 转 性能分析工具汇总
  7. 如何使得WIN7下用VS2010做出的MFC程序具有XP风格(摆脱传统界面的效果)
  8. number six
  9. mfc 弹簧_弹簧和线程:异步
  10. FreeRTOS信号量---二值信号量
  11. mac php7.0 yaf 安装,MAC MAMP PRO PHP YAF 安装
  12. MySQL 常用命令大全
  13. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  14. 有关vi(vim)的常用命令
  15. 2014年DevExpress使用教程合集
  16. mysql执行计划(explain)
  17. DOA算法1:MUSIC算法(二)
  18. 【webssh】网页上的SSH终端
  19. 阿里云WordPress建网站的方法
  20. 【清华大学】操作系统 陈渝——Part11 死锁

热门文章

  1. shell脚本实例-判断主机存活 以及企业备份方案
  2. 13-day13-str
  3. Segments POJ 3304 直线与线段是否相交
  4. 表格cell之间的横线不显示
  5. 23.2.3 高速缓存依赖性(1)
  6. Nslookup 命令使用浅析
  7. [Python人工智能] 二十八.Keras深度学习中文文本分类万字总结(CNN、TextCNN、LSTM、BiLSTM、BiLSTM+Attention)
  8. [LeetCode] Length of Last Word - 最后一个单词的长度
  9. C# 系统应用之清空回收站操作
  10. HarmonyOS之数据管理·关系型数据库的应用