永发信息网

比较两个浮点数是否相等用什么运算符?

答案:1  悬赏:0  手机版
解决时间 2021-11-07 08:12
比较两个浮点数是否相等用什么运算符?
最佳答案
暂时使用等于号比较即可。
虽然比较两个数相等要用等于号,但是,由于计算机上的浮点数存储的规则的限制,导致数据的比较上要考虑浮点数的精度问题.

所以, 如果你允许数据的偏差在 0.001的话,那么,你可以if ( a - b < 0.001)  认为a=b。

当然,这个偏差本身是浮点数,所以,按照IEEE754的标准,但精度浮点数有效位最多小数点后7位。而双精度则是最多小数点后15位。因此,你指定的这个偏差要是“合理”的才行。
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。
浮点数概念
先澄清一个概念,浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值,具用浮点数或定点数表示某哪一种数要看用户赋予了这个数的意义是什么。
C++中的浮点数有6种,分别是:
float:单精度,32位
unsigned float:单精度无符号,32位
double:双精度,64位
long double:高双精度,80位
然而不同的编译器对它们的支持也略有不同,据我所知,很多编译器都没有按照IEEE规定的标准80位支持后两种浮点数的,大多数编译器将它们视为double,或许还有极个别的编译器将它们视为128位?!对于128位的long double我也仅是听说过,没有求证,哪位高人知道这一细节烦劳告知。
下面我仅以float(带符号,单精度,32位)类型的浮点数说明C++中的浮点数是如何在内存中表示的。先讲一下基础知识,纯小数的二进制表示。(纯小数就是没有整数部分的小数,讲给小学没好好学的人)
纯小数要想用二进制表示,必须先进行规格化,即化为 1.xxxxx * ( 2 ^ n ) 的形式(“^”代表乘方,2 ^ n表示2的n次方)。对于一个纯小数D,求n的公式如下:
n = 1 + log2(D); // 纯小数求得的n必为负数
再用 D / ( 2 ^ n ) 就可以得到规格化后的小数了。接下来就是十进制到二进制的转化问题,为了更好的理解,先来看一下10进制的纯小数是怎么表示的,假设有纯小数D,它小数点后的每一位数字按顺序形成一个数列:
{k1,k2,k3,...,kn}
那么D又可以这样表示:
D = k1 / (10 ^ 1 ) + k2 / (10 ^ 2 ) + k3 / (10 ^ 3 ) + ... + kn / (10 ^ n )
推广到二进制中,纯小数的表示法即为:
D = b1 / (2 ^ 1 ) + b2 / (2 ^ 2 ) + b3 / (2 ^ 3 ) + ... + bn / (2 ^ n )
现在问题就是怎样求得b1,b2,b3,……,bn。算法描述起来比较复杂,还是用数字来说话吧。声明一下,1 / ( 2 ^ n )这个数比较特殊,我称之为位阶值。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老师带我进平台交易,喊单让我损失20余万,感
昭通交警支队科目一昭通驾校考点办公地址在什
为啥裸车价是19.88万而全款却是27万呢?
设从键盘输入一个整数序列:a1,a2,...,an
小车高速上限速120公里,跑130算不算超速
dress up是什么意思
三国中最短命的人
100一25=75可以这样算100一20=80,60一5=55对
D970407怎么用正则表达式表示
造价初学者问一下,基坑,基础沟槽,基础梁,
鱼胶公的好还是母的好 吃鱼胶公的还是母的好
为什么开豪车的都是女的,难道因为那啥
12-1235000是什么电话
天津到十渡求全程高速线路及费用
刘峻琳高考多少分 历年来重庆中考最高分数是
推荐资讯
生物答案1-7
乃金是金鼎的意思吗
这是我用铝片和氢氧化钠反应,为什么最后会有
36万等于多少亿
侃侃而谈怎么读
手机能播放出720p的效果么,目前的手机分别率
奥拉星5周年图鉴在哪
c语言中statuc int i=1什么意思
620除以30的商是二时余数是二十对吗
水不漏用什么可以溶解???
动车G7691次列车座位号02车09B号 请问怎么样
中国登山协会是个什么样的部门?我想去登山
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?