精华内容
下载资源
问答
  • [C++]Double类型判断相等不能用==

    千次阅读 2019-04-04 16:17:16
    double类型用==判断相等为什么不行 double类型在计算机中是个近似数,并不能保证所有位数全部精准 1.举个例子 #include "pch.h" #include <iostream> int main() { double a = 4; double b = 0.1; double ...

    double类型用==判断相等为什么不行

    浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数
    1.举个例子

    
    #include "pch.h"
    #include <iostream>
    int main()
    {
    	double a = 4;
    	double b = 0.1;
    	double c = a - b;	//3.9
    }
    

    上边代码c应该等于3.9000000000000~,但是通过单步去看c的值为3.8999999999999999

    2.所以我们用==方式去判断就会有问题如下:

    #include "pch.h"
    #include <iostream>
    #define Epslion 1e-8
    int main()
    {
    	double a = 4;
    	double b = 0.1;
    	double c = a - b;	//3.9
    	double d = 3.1 + 0.8;	//3.9
    	if (c == d)
    		std::cout << c;
    	system("PAUSE ");
    }
    

    3.结果是控制台没有任何输出

    正确写法

    我们定义一个Epslion为1e-8,Epslion在希腊符号中代表一个极小数的意思这里取1*10的-8次幂

    #include "pch.h"
    #include <iostream>
    #define Epslion 1e-8
    int main()
    {
    	double a = 4;
    	double b = 0.1;
    	double c = a - b;	//3.9
    	double d = 3.1 + 0.8;	//3.9
    	if (abs(c - d) < Epslion)
    		std::cout << c;
    	system("PAUSE ");
    }
    

    通过abs(c - d) < Epslion,两数差值的绝对值与一个极小数进行比较来判断才是正途

    展开全文
  •   浮点数在内存中的存储有舍入误差,在计算机中用近似表示任意某个实数。...  所以不能用==来判断两个double是否相等,而是, const double eps = 1e-8; if(abs(a-b) <= eps) 相等 else 不相等 ...

      浮点数在内存中的存储有舍入误差,在计算机中用近似表示某个实数。比如,

    double val1 = 4.0;
    double val2 = 0.1;
    double a = val1 - val2;
    

    你认为a应该等于3.9,实际在计算机中它却是3.899999999999999999999。

      所以不能用==来判断两个double是否相等,而是,

    const double eps = 1e-8;
    
    if(abs(a-b) <= eps)  相等
    else 不相等
    
    展开全文
  • c++ 判断两个double是否相等

    千次阅读 2015-08-20 16:28:00
    #include <stdio.h> #include <iostream> #include<math.h> using namespace std;...bool equal(double num1,double num2) { if((num1-num2>-0.000001)&&(num1-n...
    #include <stdio.h>
    #include <iostream>
    #include<math.h>
    using namespace std;
    
    
    
    bool equal(double num1,double num2)
    
    {
    
    if((num1-num2>-0.000001)&&(num1-num2)<0.000001)
        return true;
        else return false;
    
    }
    
    int main()
    {
        double  e;
        double f;
        e = 0.05-0.075;
        f= 0.025-0.05;
        if(equal(e,f))
        {
            printf("%f\n%f",e,f);
            printf("=");
        }else
        {
            printf("%f\n%f",e,f);
            printf("!=");
        }
         
      
          
           system("pause");
         
    }

     

    转载于:https://www.cnblogs.com/zhuyaguang/p/4745594.html

    展开全文
  • c++开发中,double或者float类型判断相等性不能简单的用等于符号进行,一般会采用如下方式进行判断 static inline bool DoubleEqual(double a, double b) { return fabs(a - b) < std::numeric_limits<...

    起因

    在c++开发中,double或者float类型判断相等性不能简单的用等于符号进行,一般会采用如下方式进行判断

    static inline bool DoubleEqual(double a, double b)
    {
         return fabs(a - b) < std::numeric_limits<double>::epsilon();
    }

    为了验证这个说法,我在机器上写了如下一段代码, 结果竟然没有一次输出,貌似可以直接比较

    double a = 0, b = 0;
    for(int i = 0; i < 100000; i++) {
        a += i * 0.1;
        b += i * 0.1;
        if ( a != b) {
            printf("%f %f\n", a ,b);
        }
    }
    

    那么到底浮点数能不能比较?

    #include<stdio.h>
    int main()
    {
    	float x = 0.1;
    	if (x == 0.1)
    		printf("IF");
    	else if (x == 0.1f)
    		printf("ELSE IF");
    	else
    		printf("ELSE");
    }
    

    这段代码输出ELSE IF,这也就意味着 x == 0.1 返回了false。 x==0.1f 返回了true。这又是为什么呢?先看一段代码

    #include<stdio.h>
    int main()
    {
    float x = 0.1;
    printf("%d %d %d", sizeof(x), sizeof(0.1), sizeof(0.1f));
    return 0;
    }
    

    这段代码输出 4 8 4, 这也就说明代码中不加上f后缀,默认会采用double类型。前面的例子中 x == 0.1 导致了x 变量提升到double,double 位数比float要多,这时候就需要二进制补全。0.1的二进制表示为(0.00011001100110011…) 后面的...表示循环数。由于float的位数(23)要小于double(52)的位数,在x变量提升到double后, 编译器会将多余的尾补全尾0。

    0.00011001100110011001100 float 0.1
    | 变量提升
    V
    0.00011001100110011001100000000000000000 (float 0.1 提升到double 0.1的二进制表示)
    
    0.0001100110011001100110011001100110011001100110011001(原double 0.1的二进制表示)

    上述结果就得到了解释,float提升到double后的二进制表示和double 0.1的二进制完全不一样。

    难道所有的比较都会有这个问题吗?并不是。下面有个例子就不会产生问题比如

    #include<stdio.h>
    int main()
    {
    	float x = 0.5;
    	if (x == 0.5)
    		printf("IF");
    	else if (x == 0.5f)
    		printf("ELSE IF");
    	else
    		printf("ELSE");
    }
    

    这个就输出了IF, 

    0.5的二进制表示为0.100000…, 由此看见就算编译器在尾补上补充再多的0,也不会导致二进制表示不一样。

    总结

    同类型的比较不设计到变量提升或者截断,可以直接比较。当变量提升或者截断后,二进制没有循环模式的也是可以直接比较的。

    展开全文
  • 一:判断两个double是否相等 浮点数在计算机中并不能精确的表示,所以在判断两个double类型的数时需要其他的手段,而不是直接用==判断。 float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;...
  • C++ float、double判断是否等于0

    千次阅读 2020-02-28 21:48:28
    如果是两个int类型的数据,想要判断他们是否相等,我们可以直接比较。 int a =11; int b=11; if(a==b) 答案是肯定的,BUT如果是float和double: float是32位,double是64位。float32位中,有1位符号位,8位指数位,...
  • C++ 判断 string 是 double

    2020-03-03 16:04:34
    今天写代码,需要判断string 是否double值,例:"0.01" 是double值 然后我写了一个函数,如下: #include <iostream> #include <sstream> #include <string> using namespace std; double ...
  • double类型是否相等判断方法

    万次阅读 2017-06-20 20:09:18
    对于double类型,比如double d1=0.0000001,double d2=0d 当判断两个数据d1和d2是否相等的时候,一般不直接使用if(d1==d2) ...我们一般认为偏差在一个较小的范围内则两个数据是相等的。 正确的代码如下:public ...
  • [c++]Double数据相等比较

    千次阅读 2018-07-05 11:00:37
    #include &lt;gtest/gtest.h&... double d1 = 3.41; double d2 = 3.40+0.01; EXPECT_EQ(d1,d2); } TEST(DoubleTest, EQ2){ double d1 = 3.41; double d2 = 3.40+0.01; EXPECT_DOUBL...
  • 关于 Double类型如何判断是否相等

    千次阅读 2018-10-12 18:44:16
    我是这样想的... public class MainActivity extends AppCompatActivity { ... private double d1=0.11, d2=0.21; private static final double d = 0.0001; @Override protected void onCreate(Bundle sav...
  • 计算机判断两个数相等,将判断所有的二进制位是否相等,当所有的位都相等时,两个数才相等,绝对的相等。 解决方法: 万物没有绝对相等的概念,在我们的程序中:对小数来说,保留小数点后几位就足够了,因此两个小数...
  • c++重载double

    2020-10-02 10:38:07
    //program 13.7.1.cpp 重载double #include <iostream> using namespace std; class Complex/*复数类*/ { double real,imag; public: Complex(double r=0,double i=0):real(r),imag(i) { };//constructor ...
  • 浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中...1、将字符串转换为float、double过程存在精度...
  • C++知识点:double型和float型判断相等

    千次阅读 2017-07-17 10:57:34
    由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用符号(==)判断两个小数是否相等,如果两个小数的差的绝对值很小,比如,小于 0.0000001,就可认为他们相等。 bool equal(double a, double...
  • 浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是...1、将字符串转换为float、double过程存在精
  • C++浮点数判断相等的方法

    千次阅读 2020-08-12 14:11:58
    先看下面一段代码: #include <... double a = 0.111; double b = 0.444; double c = b - a * 3; if (c == a) cout << "==" << endl; else cout << "!=" << endl;
  • double类型值相等判断

    千次阅读 2017-01-16 19:34:50
    两实数相等:两实数的差在允许的范围内认为相等既可认为是相等的。范围:1e-6(0.000001)主要代码:int IsEqual(double a,double b) { return fabs(a-b) ; }整个判断代码#include #include using namespace std;...
  • 判断两个float或double是否相等

    万次阅读 2017-02-08 15:12:22
    double a, b; ... if(a==b) ...不用考虑初始化的问题哈,此处不是说明那个问题。不能直接 if(a==b)而是要equal(a,b)equal 函数自己写public boolean equal(double a, double b) { if ((a- b> -0.000001) && (a- ...
  • C/C++ 判断两个浮点数是否相等

    千次阅读 2019-08-31 18:45:56
    两个浮点数不能直接用 == 运算符来判断是否相等,否则往往会得到错误的结果。 因为两个数值上相等的浮点数,由于计算机内部表示的原因可能会有微小的误差(不同)。 判断两个浮点数是否相等,我们有以下两个方法: ...
  • c++ 关于double类型精度问题

    千次阅读 2021-02-27 15:59:36
    一个兄弟读研,经常问我一些c++方面的问题,这次他遇到了double精度影响矩阵运算库eigen的问题, 矩阵数据 1.89722 7.0286 -10.3006 2.24151 -2.2824 4.89696 4.13873 4.7462 -5.40362
  • 计算表面积和体积,并判断长方体是否相等(分别用全局函数和成员函数来实现)。 参考代码: #include <iostream> using namespace std; class Cube { private: double m_l; double m_w; double m_h; ...
  • C++判断两个浮点型数字是否相等

    千次阅读 2018-07-04 23:34:03
    bool Equal(double num1, double num2) { if((num1 - num2 &gt; -0.0000001) &amp;&amp; (num1 - num2 &lt; 0.0000001)) return true; else return false; }
  • 由于double浮点数的精度问题,所以在比较大小的时候,不能像int整数型那样,直接if(a==b),if(a<b),if(a>b) 要使用一个精度EPS: #include <math.h> //头文件要记得加const double EPS = 1e-6; ...
  • C++ 判断是否在多边形内部的方法

    千次阅读 2018-11-29 14:26:59
    在网上看到了很多种方法来判断“点是否在多边形内部”,最终选择了一种简单易懂,且适合所有多边形的方法--水平/垂直交叉点数判别法。 方法 如果从点P作水平向左的射线的话,假设P在多边形内部,那么这条射线与...
  • c++Double类型不能直接比较大小

    万次阅读 2018-03-14 00:18:54
    被一道C语言课后练习题卡了好久,,,原因竟然是double的精度问题。写篇博客标记一下这个错误。 如题,double a,b;然后直接if(a>b)或者if(a<b)或者if(a==b)都是不精确的。 标准做法应该要加一个eps。 ...
  • 在采用C++编写算法时,经常需要判断两个浮点数是否相等。由于计算精度的原因,采用“==”运算符是不可行的。下面给出采用C++11标准判断两个浮点数是否相等的代码: // Test whether two float or double ...
  • 不能用等号判断两个小数是否相等 bool isEqual(const double a, const double b) { const eps_0 = 1.0e-6, rel_error = 10e-4; bool isEqualFlag = FALSE; if(fabs(a-b)<=eps_0) { isEqualFlag = TRUE; } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,330
精华内容 54,932
关键字:

c++判断double是否相等

c++ 订阅