浮点数的内存表示
来源:互联网 发布:盗墓笔记解密 知乎 编辑:程序博客网 时间:2024/06/12 01:21
判断浮点数是否相等如果用下面的方法:
float x = 0.6;
if(0.6 == x)
{
....
}
是不对的,得用下面的方法:
if((x - 0.6 <= 1e-6) || (x - 0.6 >= -1e-6))
{
...
}
原因是,浮点数在内存中的值不是一个精确值,比如0.6在内存中的值不是绝对与0.6相等。
对于Intel CPU,对32位浮点数的表示,用的是IEEE 754标准,即(从高位到低位):
1位符号位(0表示正数,1表示负数)
8位阶数位(用移码表示)
23位小数位(小数位需按IEEE 754规格化为1.fff...的样子,整数位的1省略)
比如,在我的机子里,在x地址处的内存值为:0x3F19999A
二进制为:0 01111110 00110011001100110011010
正数 阶数为-1 尾数为:1.00110011001100110011010
也就是:0.100110011001100110011010
化为十进制就是:0.60000002384185
和0.6已经非常相近了,但不是0.6,所以在if判断时不能用 0.6 == x这样的语句。
- 浮点数的内存表示
- 浮点数的内存表示
- 浮点数的内存表示
- 计算机内存中浮点数的表示
- 输出浮点数内存表示
- 浮点数内存表示方法
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- 浮点数的表示
- VB.NET如何在没有.NET框架的机器上运行
- asp.net结合html,javascript实现无刷新跨域数据提交
- GPGPU相关
- 注册终止函数atexit
- C#中webService发布与调用
- 浮点数的内存表示
- (转)我是如何挑选刚毕业的学生的
- 关于栈在函数调用中的作用
- iocp(转)
- 一个asp.net的生成曲线图的过程
- ASP.NET读写cookies
- *.jspf扩展名文件在jsp:include、@include和c:import中的区别、问题和解决
- SQL Server 很好获取年月日时分秒的方法哦
- 快来吧,快走吧(韩寒)