欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c语言中浮点数精度陷阱

程序员文章站 2022-03-30 17:46:38
...

浮点数在计算机中采用数符+阶码+尾数表示。

主要有以下几个需要注意的点:

1.float型 有效数字为6-7位,

  double型 有效数字为15-16位。

2.浮点数间比较大小不能通过==运算符比较。因为在机器中小数采用近似值表示。

  需要通过减法去比较。如

float f1 = 4.56;
if(abs(f1-4.56)<1e-6){
    printf("f1 is equal to 4.56");
}

3.在内存中存放方式(大端,小端)

https://baike.baidu.com/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin

阶码实际值 为 数值-127, 以2为底。

4.数据转换:

在整数除法中,由于整数除法会丢失小数。

int a = 5;
int b = 2;
float f = a / b;
printf("%f\n",f);

输出为2.0 。这里是因为前面 a/b 已经造成了数据丢失,才赋值给float。所以没有输出2.5 。

需要对a或b进行强制类型转换成float或者double才可以。

float f = (float)a / b;
printf("%f", f);

此时输出为2.5 。

相关标签: 浮点数 精度