当前位置: 首页 > 面试题库 >

您能否将浮点值精确地比较为零?

太叔昊穹
2023-03-14
问题内容

我知道我们无法使用==比较2个浮点值。我们只能比较它们彼此之间的间隔。我知道

if(val == 0.512)

由于浮点计算和转换为二进制所固有的错误而导致错误,应该

if (val in (0.512-epsilon, 0.512+epsilon))

但是0特别吗?我们可以将浮点数精确地比较为0吗?甚至那是不正确的?特别是在C#和Java的上下文中?

double val = 0;
val = getVal();
if(val == 0)

问题答案:

即使0具有精确的表示形式,您也不能依赖使用浮点数的计算结果精确地为0。如上所述,这是由于浮点计算和转换问题引起的。

因此,您应该针对公差epsilon测试0。



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

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

  • 问题内容: 我有这个问题,我必须将公里转换成英里。我是一个新手程序员,所以请耐心等待。 到目前为止,这是我的代码: 它给我一个错误,说: 问题答案: 您正在尝试将a 设置为变量 要修复,请更改此行 至

  • 问题内容: 我正在寻找比较应该相同的两个数据框。但是,由于浮点精度,我被告知值不匹配。我在下面创建了一个示例进行模拟。如何获得正确的结果,以便最终比较数据帧对两个单元格都返回true? 问题答案: 好的,您可以为此使用: 需要相对公差和绝对公差。这些有默认值:,分别

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

  • 我知道使用是因为分辨率无关的坐标系。 与,,,,比较时不是容易出现误报吗?它是一个浮点,它们有不精确的问题:例如。 在比较时是否在内部处理这个问题,或者是否会发生读取为零的与不比较为true的情况?