浮点数和双变量的比较

Che*_*rma 4 c floating-point double comparison

可能重复:浮点数与浮点字面值的比较中浮点数
和双奇数输出之间的差异

我正在使用visual C++ 6.0,在程序中我比较float和double变量例如这个程序

#include<stdio.h>
int main()  
{    
    float a = 0.7f;
    double b = 0.7; 
    printf("%d %d %d",a<b,a>b,a==b);
    return 0;
 }  
Run Code Online (Sandbox Code Playgroud)

我得到1 0 0作为输出

并为

#include<stdio.h>
int main()  
{    
    float a = 1.7f;
    double b = 1.7; 
    printf("%d %d %d",a<b,a>b,a==b);
    return 0;
 }  
Run Code Online (Sandbox Code Playgroud)

我输出0 0 0.

请告诉我为什么我得到这些奇怪的输出,有没有办法在同一个处理器上预测这些输出.如何比较C中的两个变量?

Sta*_*key 8

它与浮动和双打的内部表示在计算机中的方式有​​关.计算机以二进制形式存储基数为2的数字.以二进制形式存储的基数为10的数字可能具有重复数字,并且存储在计算机中的"精确"值不相同.

比较浮点数时,通常使用epsilon来表示值的微小变化.例如:

float epsilon = 0.000000001;
float a = 0.7;
double b = 0.7;

if (abs(a - b) < epsilon)
  // they are close enough to be equal.
Run Code Online (Sandbox Code Playgroud)

  • 错误.你应该使用fabs. (9认同)