浮点类型

float/double 表示带小数的数,但是「近似值」。不能像数学实数那样随意比较相等。

1. 概念

2. 完整例子:为什么 == 不可靠

C
1#include <stdio.h>
2 
3int main(void) {
4 float a = 0.1f + 0.2f;
5 double b = 0.1 + 0.2;
6 printf("a=%.20f\n", a);
7 printf("b=%.20f\n", b);
8 /* a == 0.3f 往往为假 */
9 if (a == 0.3f) {
10 printf("equal\n");
11 } else {
12 printf("not exactly equal\n");
13 }
14 return 0;
15}

3. 正确比较思路

C
1float diff = a - 0.3f;
2if (diff < 0.0001f && diff > -0.0001f) {
3 /* 认为近似相等 */
4}

4. 与嵌入式的关系

ADC 读数换算成电压常用浮点;有的芯片无 FPU,会用定点数或整数毫伏。先掌握 float 概念,再看工程优化。