不同类型的变量与零究竟是如何比较(2)

简介: 不同类型的变量与零究竟是如何比较

4.float 变量与"零值"进行比较  

我们知道浮点数在内存中存储,可能会有精度损失(注:这里的损失,不是一味的减少了,还有可能增多,浮点数本身存储的时候,在计算不尽的时候,会“四舍五入”或者其他 策略)


q1.png


4.1两个浮点数是否可以进行相等比较

从下面的图片代码中可以看出 x=1.0,y=0.1,那么进行 if 表达式判断时 x - 0.9 应该等于 0.1 ,0.1与 y 相等应当打印 1,但却打印了 0 ,这是为什么了?


q2.png


那我们接下来,来看看打印 x-0.9 和 0.1 打印的究竟是什么?  


原来内存中 x - 0.9 并不等于 0.1,而是精度损失了,而 y 也不是0.1,也精度损失了,所以上面代码的才没有打印 1

q3.png



结论:因为精度损失问题,两个浮点数,绝对不能使用==进行相等比较


4.2那么两个浮点数该如何比较呢?

应该进行范围精度比较

q4.png



注:fabs是浮点数求绝对值


如何设置精度?


自己用宏定义设置

使用系统精度

1.自己用宏定义设置精度

w1.png



2.使用系统精度  

w2.png



4.3 float 变量与 0 比较

#include<stdio.h>
#include<float.h>
#include<math.h>
int main()
{
  float x = 0.000000000000001f;//当数值足够小时,会被判断为0
  //if (fabs(x) < DBL_EPSILON)
  if (fabs(x-0) < DBL_EPSILON)
  {
  printf("1\n");
  }
  else
  {
  printf("0\n");
  }
  return 0;
}

5.指针变量与“零值”进行比较

5.1表示0的方法

我们之前学习过 数字0、转义字符 \0、空 NULL,它们也都可以表示0

w3.png



我们可以转到NULL定义,可以看到其实NULL就是0

w4.png



5.2指针变量与零比较

e1.png


6.else 到底与哪个 if 配对呢?

1.这个代码总是让人感觉它与第一个 if 匹配,其实它跟第二个 if 匹配,因为 else 采取的是就近原则,所以这个代码什么也都不打印


#include<stdio.h>
int main()
{
  int x = 0;
  int y = 1;
  if (10 == x)
  if (11 == y)
    printf("hi\n");
  else
  printf("hello\n");
  return 0;
}

2.这个才是正确的代码风格,一看就知道 else 与哪个 if 匹配


#include<stdio.h>
int main()
{
  int x = 0;
  int y = 1;
  if (10 == x)
  {
  if (11 == y)
        {
            printf("hi\n");
        }
  } 
  else
  {
  printf("hello\n");
  }
  return 0;
}

为什么 不写成 x==10,而写成10 == x?


答:因为这样写可以避免把==写成=,如果不小心写成=,我们知道赋值号的左边必须是变量,所以这属于语法错误,编译器会提示,那要是不小心写成了 x = 10,这就属于运行错误系统不会提示。


由此可知良好的编程风格对编程者是多么重要,养成良好的编程习惯,从你我做起。  


相关文章
|
前端开发 JavaScript 算法
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
1549 0
|
JSON JavaScript 前端开发
【面试题】JS判断两个数组相等的4类方法
【面试题】JS判断两个数组相等的4类方法
1078 0
|
JavaScript 前端开发 Java
java的URLEncoder.encode() 疑问与解惑
本文是博主学习java的记录,希望对大家有所帮助。
693 0
java的URLEncoder.encode() 疑问与解惑
|
JavaScript
JS实现判断两个数的大小
JS实现判断两个数的大小
JS实现判断两个数的大小
|
14天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8109 15
|
13天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2161 12
|
13天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1819 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!

热门文章

最新文章