文档章节

C++浮点数比较与精度损失

走向世界的男子
 走向世界的男子
发布于 2016/10/26 15:24
字数 404
阅读 38
收藏 0

1.浮点数在计算机中的存储机制

32bit:bit0~bit22存储有效数字部分;bit23~bit30存储指数部分;bit31存储符号位

64bit:bit0~bit51存储有效数字部分;bit52~bit62存储指数部分;bit63存储符号位

例如:30.25

二进制表示方法:11110.01,转换为二进制指数法:1.111001*2^4

2.使用浮点数可能出现的精度损失

#include <iostream>
#include <string>
using namespace std;
void main()
{
	char buff[100] = { '\0' };
	float fa = 500.5;//存储的时候转换为二进制111110100.1,存储有效位的bit是足够的,所以并不会有精度损失
	float fb = 500.344;//111110100.0101100000000....后面多少位,懒得算了,存储有效数字部分的bit应该是不够的,所以存储进来会出现精度损失
	float fc = 500.125;//111110100.001,和第一种情况一样,bit足够存储有效位,所以不会有精度损失

	//当然同理,double类型的数据也会出现以上情况,只是所占字节数不一样罢了

	getchar();
}

因此,是否会出现精度损失,与你的数据本身有关系,换句话说,就是小数点后面的部分能不能用有限位数的来表示,即n是否小于float或者double用于存储有效为的bit数。

3.浮点数比较的方法-epsilon-方法

假定存在两个浮点数A,B,如果直接比较,是非常不明智的,可以令X=A-B,再设定一个小的参考量e=0.0001(结合实际情况设定),然后比较X与e之间的大小。

© 著作权归作者所有

上一篇: enum/struct
走向世界的男子
粉丝 0
博文 7
码字总数 2193
作品 0
武汉
私信 提问
浅析:Java与C++的主要区别

Java区别于C++ 表面看来两者最大的不同在于Java没有指针,或者说,Java满地都是指针。对于编程者而言Java的这种设计是安全且更易用的。说Java满地是指针的原因在于它把指针的功能隐藏了,其实...

Ace☞Tseng
2012/10/09
0
0
【转】Erlang基本数据类型

在讲述数据类型前先简单的介绍一下Erlang中的变量,Erlang中的变量和其他语言中的变量相比有三点不同: 1.Erlang不对变量的类型进行定义,它可以被赋值成任何类型的值,Erlang中所有类型的值...

摩云菜
2014/09/16
0
0
C语言精要(第二章:基本数据类型)

2.1 C语言基本数据类型 在计算机术语中,把⼆进制数中的某⼀位数又称为⼀个⽐特(bit)。⽐特这个单位对于计算机⽽⾔,在度量上是最⼩的单位。除了⽐特之外,还有字节(byte)这个术语。⼀个...

ryanliue
2018/10/16
0
0
QT_NO_CAST_FROM_ASCII 副作用一则(QTBUG20821)

问题 QTBUG 20821描述这样一个问题: 很简单的一个程序,编译运行,得到结果: 但是,如果在.pro文件内添加了 DEFINES += QT_NO_CAST_FROM_ASCII 之后,编译运行,"没有任何警告或错误",但结...

晨曦之光
2012/05/08
98
0
C++ AMP 实战:绘制曼德勃罗特集图像

之前我写了一篇用GPU绘制曼德勃罗特(Mandelbrot)集图像的文章,里面使用的技术是与DirectX 11继承在一起的DirectCompute。DirectCompute执行在GPU上的kernel代码,必须用一种特殊的HLSL语言...

鉴客
2012/02/07
6.1K
4

没有更多内容

加载失败,请刷新页面

加载更多

浅析大数据 学习大数据后能做什么

大数据时代的到来使得大数据开发人才迎来了前所未有的机遇和挑战!一个绝佳的入行机会摆在了众人面前!于是,很多人都在打听,大数据到底有何应用?可以用来做什么?好程序员今天就为大家作出...

好程序员IT
28分钟前
1
0
C# USB视频人脸检测

此程序基于 虹软人脸识别进行的开发 SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral 前提条件 从虹软官网下载获取ArcFace引擎应用开发包,...

是哇兴哥棒棒哒
39分钟前
2
0
Vagrant虚拟机硬盘扩容

# 停止虚拟机vagrant halt <machine_name># 进入VirtualBox VMs目录,查看并记录原磁盘uuid,留作后用vboxmanage showhdinfo box-disk1.vmdk# 克隆磁盘,vmdk格式无法调整大小,需要...

sskill
40分钟前
1
0
分布式商业萌芽,银行迎来发展新机遇

01 分布式商业萌芽,银行迎来发展新机遇 金融界:近几年区块链的热度经历了过山车般的转折。目前追逐区块链的资本也开始冷静下来,于此同时,各大商业银行对区块链的研究应用也越来越多。您认...

Java领航员
46分钟前
3
0
Spring系列教程六: Spring jdbcTemplate在Dao中的使用

概念 Spring中的jdbcTemplate的主要作用是实现数据的交互,下面我们就在dao层中如何使用jdbctemplate写测试案例 项目目录如下 基于xml实现jdbctemplate 这里我们使用的是JdbcDaoSupport这个类...

我叫小糖主
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部