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中的两个变量?
它与浮动和双打的内部表示在计算机中的方式有关.计算机以二进制形式存储基数为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)
| 归档时间: |
|
| 查看次数: |
23331 次 |
| 最近记录: |