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

C[副本]中的浮点比较

柳玄裳
2023-03-14
#include<stdio.h>
int main()
{
    float x = 0.6;
    if (x == 0.6)
        printf("IF");
    else if (x == 0.6f)
        printf("ELSE IF");
    else
        printf("ELSE");
}

此代码给出输出ELSE

#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");
}

此代码给出的输出是:

虽然两个程序看起来都一样,但为什么输出有差异呢?为什么会这样?

共有1个答案

席俊
2023-03-14

因为0.5具有IEEE-754二进制格式(如binary32和binary64)的精确表示。0.5是2的负幂。另一方面,0.6不是2的幂,它不能用floatdouble精确表示。

 类似资料:
  • 我正在纠结于一个基本的浮点精度问题。问题就在这里: 运行代码得到“否”

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

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

  • 今天我做了一个简单的测试来比较Java和c之间的速度--一个简单的循环,让一个整数“I”从0增加到20亿。 我真的期望C语言比Java更快。我对结果感到惊讶: Java所用的时间(秒):大约。1.8秒 C:大约用秒表示的时间。3.6秒。 我不认为Java是一种更快的语言,但我也不明白为什么在我的简单程序中循环的速度是c的两倍? 我是不是在计划中犯了重大错误?还是MinGW的编译器配置不好还是怎么的

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

  • 我正试图在Linux中实现这一点 我面临着几个问题: 处理浮点数 比较(使用$vs不使用) 计算绝对值 我不能一次解决我的问题并处理所有这些问题。我已经搜索了很多很多页面,有些解决方案不适合我。例如,我似乎没有腹肌功能。 任何帮助都将不胜感激。