zoukankan      html  css  js  c++  java
  • 两个float 怎么比较大小

    转自:http://blog.csdn.net/mydriverc2/article/details/49888947

    float 类型不能比较相等或不等,但可以比较>,<,>=,<=

    用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用

        if (fabs(price - p) < 0.000001)

    来代替

        if (price == p)

    很多工程的应用都是采用计算精确度的方式

    定义一个精度,用差的绝对值比较,在精度范围内就认为是相等的;大小可以直接比较。

    【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。
    千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要
    避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
    假设浮点变量的名字为x,应当将
    if (x == 0.0) // 隐含错误的比较
    转化为
    if ((x>=-EPSINON) && (x<=EPSINON))
    其中EPSINON 是允许的误差(即精度)。

    计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:

        float a=10.222222225,b=10.222222229
        数学上a和b是不相等的,但在32位计算机中它们是相等的。
     
        如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的。
        不要直接用“==”或者“!=”对两个浮点数进行比较,但是可以直接用“<”和“>”比较谁大谁小。
    test.cpp
    ****************************************
    #include
    #include
    #define EPSILON 1e-6
    int main(void)
    {
      float a = 0.000003;
      float b = 0.000005;
      printf("a=%f/n",a);
      printf("b=%f/n",b);
      printf("abs(a-b)=%f/n",abs(a-b));
      printf("fabs(a-b)=%f/n",fabs(a-b));
      if ( fabs(a-b) <= EPSILON )  //判断浮点数是否相等
      {
     printf("a==b/n");
      }else
      {
     printf("a!=b/n");
      }
      if ( fabs(a) <= EPSILON)  //判断浮点数是否等于0
      {
     printf("a==0/n");
      }else
      {
     printf("a!=0/n");
      }
      if (a > b)  //比较两个浮点数的大小,
      {
     printf("a>b/n");
      }else
      {
     printf("a
      }
      return 0;
    }
  • 相关阅读:
    网络中有三种通讯模式:单播、广播、组播(多播)
    chmod命令
    linux bash 命令重定向和多命令执行
    linux中管道符“|”的作用
    web测试常用的 linux 命令
    集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)
    iOS 监测电话呼入
    iOS NSUserDefaults [setValue:forKey:] [setObject:forKey:] <Objc> setValue(_,forKey:) set(_,forKey) <Swift 3>
    iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
    iOS 加载Viewcontroller的几种方法
  • 原文地址:https://www.cnblogs.com/shenckicc/p/6909963.html
Copyright © 2011-2022 走看看