比较两个浮子[英] Compare two floats

本文是小编为大家收集整理的关于比较两个浮子的处理方法,想解了比较两个浮子的问题怎么解决?比较两个浮子问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

#include <stdbool.h>

bool Equality(double a, double b, double epsilon)
{
  if (fabs(a-b) < epsilon) return true;
  return false;
}

我尝试了这种方法比较两个双打,但是由于我不知道如何选择epsilon,我总是会遇到问题> 0.000001 .我尝试了一些数字,有时我会得到0.000001 != 0.000001,有时0.000001 == 0.000002 除了与epsilon进行比较,还有另一种方法吗?

我的目的是比较两个双打(在我的情况下代表时间).代表毫秒的时间的变量t是双重的.它会被另一个函数0.000001,然后0.000002等.每次t更改时,我想检查它是否等于type double tt的另一个变量,如果tt == t,我有一些指令要执行..
感谢您的帮助

推荐答案

在这里看: http://floating-point-gui.de/errors/比较/

由于四舍五入错误,大多数浮点数最终都是 略微不精确.只要这个不精确地保持很小,它就可以 通常被忽略. 但是,这也意味着预期的数字是 相等(例如,通过不同的正确计算相同的结果 方法)通常略有不同,简单的平等测试失败.

,当然,每个计算机科学家对浮点数的了解

其他推荐答案

首先:计算布尔值(使用<运算符)没有意义,然后将其包裹在另一个布尔值中.只需这样写:

bool Equality(float a, float b, float epsilon)
{
  return fabs(a - b) < epsilon;
}

第二,您的epsilon本身可能不是float的代表性,因此看起来不像您期望的那样.尝试使用2的负功率为2,例如1/1048576.

其他推荐答案

另外,您可以比较两个整数.只需将您的两个浮子乘以所需的精度,然后将它们铸成整数即可. 确保正确围绕/向下汇总.这是它的外观:

BOOL floatcmp(float float1, float float2, unsigned int precision){
   int int1, int2;

   if (float1 > 0)
      int1 = (int)(float1 * precision + .5);
   else
      int1 = (int)(float1 * precision - .5);

   if (float2 > 0)
      int2 = (int)(float2 * precision + .5);
   else
      int2 = (int)(float2 * precision - .5);

   return (int1 == int2);
}

本文地址:https://www.itbaoku.cn/post/359416.html