当前位置: 首页 > 知识库问答 >
问题:

比较浮点数的正确方法[重复]

苗承
2023-03-14

我正在计算一个形式为n+fraction的实数值。例如,n+fraction=7.10987623,然后n=7fraction=0.10987623接下来,我需要检查fraction是否大于或等于比值23269/25920

在C/C++中,下面的语句似乎给出了正确的结果;不过,我不确定是否是正确的对比方式:

// EPSILON is defined to be the error tolerance
// and `ratio' is defined as 23269.0/25920.0 
if(fabs(fraction - ratio) > EPSILON)
 // `fraction' is greater or equal to `ratio'

我也试着做另一种方式,但它似乎给出了不正确的结果。

if(fabs(fraction - ratio) < EPSILON)

共有1个答案

都乐逸
2023-03-14

你有比较平等的正确方法:

fabs(fraction - ratio) < EPSILON

它在宽度epsilonratio周围建立了一个相等带。任何高于这一条的东西,都是严格意义上的。因此,>检查是:

fraction > ratio + EPSILON

因为我们需要>=,所以我们只取这两部分的并集:

fraction > ratio - EPSILON
 类似资料:
  • 问题内容: 我想比较PHP中的两个浮点数,如以下示例代码所示: 在此代码中,即使和相同,它也返回条件的结果而不是条件。有没有什么特殊的方法来处理/比较PHP中的浮点数? 如果是,那么请帮助我解决此问题。 还是我的服务器配置有问题? 问题答案: 如果您这样做,它们 应该 是相同的。但是请注意,浮点值的一个特征是 看起来 可以导致相同值的计算实际上不必相同。因此,如果是一个文字并通过计算到达该文字,则

  • 在C中,如果我们执行以下代码: 上面的代码打印“更少”。 但如果我们执行以下代码: 它打印“否”。 原因是什么?浮点数据类型是如何工作的?

  • 问题内容: 我刚刚阅读了有关浮点值比较的声明 不得使用==或!=运算符比较浮点值。大多数浮点值没有精确的二进制表示形式,并且精度有限。 如果是这样,比较两个浮点值的最佳方法是什么? 问题答案: 以下扩展方法对于实现Kevin的建议可能有用: 现在,您可以执行以下操作: 只需将更改为更合适的名称,或在需要时将默认边距更改为比更好的值。

  • 对于这些代码行,我得到0作为输出,即它们都是相等的。现在,如果我理解正确,a b和c可能会存储稍微不同版本的真值.3因此,当做一个Float.compare(...)对这些值,我希望得到一个输出值,而不是0。为什么我把它们取为0?

  • 本文向大家介绍PHP中浮点数计算比较及取整不准确的解决方法,包括了PHP中浮点数计算比较及取整不准确的解决方法的使用技巧和注意事项,需要的朋友参考一下 浮点数计算结果比较 一则浮点数计算例子如下: 打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。 对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能

  • 问题内容: 我在MySQL数据库架构中引入浮点列时遇到了一个问题,即对浮点值的比较不会总是返回正确的结果。 1-50.12 2-34.57 3-12.75 4-…(其余均小于12.00) 这将返回“ 3”。 我已经读过,在MySQL中比较浮点值是一个坏主意,十进制类型是更好的选择。 我是否有希望继续使用float类型,并使比较正常工作? 问题答案: 您是否注意到以下问题? 在某些行之间有一个额外的