c - float 相等性检查

标签 c floating-point

使用以下代码,

#include <stdio.h>

int main(void){
  float x;
  x=(float)3.3==3.3;
  printf("%f",x);
  return 0;
}

输出是0.00000

但是当数字3.3换成3.5时,

#include <stdio.h>

int main(void){
  float x;
  x=(float)3.5==3.5;
  printf("%f",x);
  return 0;
}

输出为1.0000

为什么输出有差异?

最佳答案

您应该明白,在 C 中,文字 3.3 的类型为 double。将 double 转换为 float 可能会丢失精度,因此 3.3F 与 3.3 的比较结果为 false。对于 3.5,转换是无损的,因为两者都可以准确表示并且比较结果为真。

它与(以 10 为基数而不是以 2 为基数)比较有关

3.3333333 with 3.3333333333333333  (false)
3.5000000 with 3.5000000000000000  (true)

关于c - float 相等性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142348/

相关文章:

更改 C 中缓冲区的播放速率?

c - C 中的短整型、十六进制和二进制基数

c - 初始化没有大小的数组字面量

python - 为什么 SQL Server 返回 0.759999 而 MySQL 返回 0.76?

Android float 乘以一个因子 0.004739

c - "fork()"后printf异常

c - 从函数 : Error 返回字符串指针

python - 为什么 “np.inf//2” 导致 NaN 而不是无穷大?

ruby - 如果 float 不是 .00 则只显示小数点 sprintf/printf

python - 使用 where 避免 RuntimeWarning