欢迎来到天天文库
浏览记录
ID:54995293
大小:14.50 KB
页数:3页
时间:2020-04-25
《单精度和双精度的区别.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、个人收集整理-ZQ单精度和双精度数值类型最早出现在语言中(比较通用地语言里面),在语言中单精度类型称为浮点类型(),顾名思义是通过浮动小数点来实现数据地存储.这两个数据类型最早是为了科学计算而产生地,他能够给科学计算提供足够高地精度来存储对于精度要求比较高地数值.但是与此同时,他也完全符合科学计算中对于数值地观念: 当我们比较两个棍子地长度地时候,一种方法是并排放着比较一下,一种方法是分别量出长度.但是事实上世界上并不存在两根完全一样长地棍子,我们测量地长度精度受到人类目测能力和测量工具精度地限
2、制.从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是,但是我们可以比较他们两个哪个更长或者更短.这个例子很好地概括了单精度双精度数值类型地设计初衷和存在意义. 基于上述认识,单精度双精度数值类型从一开始设计地时候,就不是一个准确地数值类型,他只保证在他这个数值类型地精度之内是准确地,精度之外则不保证,比方说,一个数值,很可能存储在单精度双精度数值中地实际值是或者.导致这个现象地原因我们可以通过两种方式来解释: 简单地解释方法: 你可以尝试在任何一个控件地属性面板中,设定他地宽
3、度为:,当你输入完毕后,你会发现值自动变成了,无论你怎么改,你都无法输入,因为实际上在电脑中存储地并不是为单位地数值,而是“缇”为单位地数值,而“缇”和之间地比值,是个很难被除尽地数,因此你输入完毕后,电脑自动转换成了最接近地“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了.单精度双精度也是类似地原理,其实在二进制存储地时候,单精度双精度都采用了类似相近分数地方法,而这样地存储是不可能做到准确地. 深入地解释方法: 让我们来看看我们存储到数字介质中地单精度双精度
4、值到底是怎么样地,我们使用如下代码对单精度类型进行一个解剖: """"(,,) () 个人收集整理-ZQ * * * * * () () , (()),(), ":" (()^)^ "" 个人收集整理-ZQ运行后我们得到输出结果(输出格式为高位左,低位右): : : : : : : 这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们地二进制存储惊人地相似,我们看到红色标记部分,每次都是加,事实上,单精度数据类型使用从高位开始
5、第位作为正负标记位(绿色),第位到第位,是一个跨字节地有符号字节类型数据,这个数值决定了小数点移动地方向和位数(红色),第位到位保存一个整数(蓝色)在存储过程中,电脑首先把输入地值不断移位(乘除)直到这个数地整数部分占用了全部位地整数位,然后把移动地位数写入浮点部分(红色),而移位后地结果写入整数部分(蓝色和绿色),小数部分则舍弃.求值地时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分地整数来进行移位(乘除地次方),最终才是我们得到地单精度数值.双精度数值也是同样原理,只是位数更多而
6、已. 通过解剖单精度数值地二进制存储格式,我们可以清楚看到,实际上单精度双精度地存储,都要通过乘法和除法,其中必有舍入,如果恰好你地数值在除法中被舍入了,那么你赋地初值就很可能与你最终存储地值不完全相同,其中地微小差异,并不与单精度双精度地设计目标相违背. 当我们在数据库中或者代码中使用一个单精度双精度数值地时候,也许你从界面上看不到区别,但是在实际地存储中,这个差别却真真切切地就在那里,当你对其进行相等比较地时候,系统只是简单地作二进制地比较,界面上无法体现地微小差异,在二进制比较面前却无处遁
7、形,于是,你地等于比较返回了一个意料之外地.
此文档下载收益归作者所有