浮点数比较之我见

原创 2011年01月21日 19:31:00

关于浮点数的特殊性,这个就不用我多说什么 了,我在这儿想跟大家讨论的是关于"=="这个比较运算符。

 

先上一段经常被大家提及的浮点数比较函数(C代码):

 

代码功能其实就是考虑能接受的两个浮点数的误差范围。很明显+0.0 == -0.0

 

再上一段java.lang.Float类中的浮点比较函数:


这段代码与以上代码有个很明显的区别,那就是+0.0 > -0.0。

 

基于上面的现象,我就在想,为什么java在比较之前不首先采用运算符"=="呢?事实在,在java里,直接采用连等运算符返回的是true。

 

如何合理解释这个奇怪的实现,我自己想到一种解释:

采用运算符"=="得到的结果可看做算术(algorithm)实现。在算术上,+0.0就应该与-0.0表示的是同一个数。而作为单纯的浮点数来比较,-0.0与+0.0在二进制表示上并不一样。

 

针对以上问题,如果大家还有其它合理解释,欢迎提出,谢谢!

 

浮点数结构详细解释比较全

  • 2010年11月03日 22:15
  • 1.39MB
  • 下载

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

浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基...
  • educast
  • educast
  • 2013年04月24日 16:34
  • 10835

为何浮点数(float,double)不能直接用等号比较

http://blog.sina.com.cn/s/blog_48d4cf2d0100qzfc.html 很早就听说了这个说法,但一直知其然,不知其所以然。实际编程的时候有些时候记得,有些时候也忘了...

JS的乘、除、加、减法结果会有误差,在两个浮点数相乘的时候会比较明显

问题:   37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)   我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 ...

永远不要比较两个浮点数是否相等

PHP手册里有一句话:永远不要比较两个浮点数是否相等。 以前没太在意,最近在项目中因为这个问题掉坑里了,所以留文铭记。 计算机内部处理浮点数的方式决定了浮点数不可能100%的精确,所以在处理浮点数...
  • tony_Ju
  • tony_Ju
  • 2012年02月08日 11:15
  • 2053

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

浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基...

浮点数的比较(2)

1. 正数的情况       根据IEEE的内存结构, 指数在高位,尾数在低位,浮点数大的对应的把其内存结构按照整数来理解进行比较的时候,情况也是成立的,因此在这里如果把他们进行比较的话,作为整数运...
  • wj3319
  • wj3319
  • 2011年09月25日 22:44
  • 226

浮点数的比较

浮点数比较问题

01 JAVA 基础补充 浮点数的比较

这篇文章主要记录一些关于精度问题的小知识,当然也不知道对不对,先记录一下~啦啦啦~我是勤劳的屌丝程序猿 少年。。 顺便复习:原码,反码,补码对于正数来说,都是一样的,对于负数,反码除符号位之外都取...

浮点数的相等比较

今天群里边一哥们儿——哦,确切地说,应该是一姊妹——问到了Python中怎样判断一个浮点数的小数部分是不是0,本意是要找和C语言中的fmod函数相同功能的函数的,在Python中在math模块中有这个...
  • dymx101
  • dymx101
  • 2011年03月15日 10:32
  • 4049
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浮点数比较之我见
举报原因:
原因补充:

(最多只允许输入30个字)