float 和 double 变量的比较

标签 c comparison floating-point double

<分区>

Possible Duplicates:
Difference between float and double
strange output in comparision of float with float literal

我正在使用 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;
 }  

我得到 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;
 }  

我得到 0 1 0 作为输出。

请告诉我为什么会得到这些奇怪的输出,以及有什么方法可以在同一处理器上预测这些输出。还有 C 中如何比较两个变量?

最佳答案

它与 float 和 double 在计算机中的内部表示方式有关。计算机以 2 为基数的二进制存储数字。以 10 为基数的二进制数存储时可能有重复数字,存储在计算机中的“确切”值并不相同。

比较 float 时,通常使用 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.

关于float 和 double 变量的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988821/

相关文章:

java - 如果小数不能用二进制精确表示,Double.toString() 如何工作?

floating-point - 从 Julia 中的像素检索 RGB 矢量

c++ - 有没有更快的方法在 SIMD 上乘以 2(不使用乘法)?

c++ - 我无法按顺序排列三个线程

Mysql查询比价

c - c中的多个逻辑运算符

javascript - jQuery/Javascript 比较运算符 "==="和 "=="

swift - Float32(Float 的别名)和 Float64(Double 的别名)有什么用?

检查斐波那契素数的项数

当其他 channel (同一定时器)具有 i2c 备用功能时,我可以使用不同的定时器 channel 吗