C语言赋值浮点数时候立即数后面加上f的意义和注意事项

在C语言中常见定义浮点数时会在立即数的后面加上f表明它是一个浮点数:

float a = 3.14159265f;

或者

#define t 3.14159265f;

但是在使用它时应注意一个事情,当你在立即数后面加上f时,编译器会认为它是一个float,当你在用它定义double或赋值时会以float的精度赋值,这会产生一个精度损失的问题,下面是一个示例:

#include <stdio.h>

int main() {
  double ft = 0.1234567890123456f;
  printf("%.16f\n", ft);
}

打印结果:

0.1234567910432816

很明显结果是错误的,可以看到精度从第8位开始就错了,这是因为float的精度根据IEEE 754的标准,它只占7位有效位,为什么只占7位这里给大家补充一下这个知识,在IEE 754的标准里float占4字节,其中23位表示小数点,而23bit位(23^2)最大能表示的数为7位,所以它小数点后最大能表示7位。

当我们把后面的f去掉后在打印一下结果就正确了:

0.1234567890123456

f在c语言里是为了区分单精度和双精度的浮点数数据,这一点大家在开发时应注意,不要因为书写习惯在一些双精度的浮点数里加上了f导致精度丢失了。

相关推荐

  1. C语言-整数与点数:内存存储差异

    2024-07-17 22:10:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 22:10:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 22:10:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 22:10:03       62 阅读
  4. Python语言-面向对象

    2024-07-17 22:10:03       72 阅读

热门阅读

  1. 测试面试题(八)

    2024-07-17 22:10:03       23 阅读
  2. IDEA常用配置

    2024-07-17 22:10:03       22 阅读
  3. 分类题解清单

    2024-07-17 22:10:03       27 阅读
  4. sourcetree 下载地址

    2024-07-17 22:10:03       23 阅读
  5. DATE_SUB 的用法

    2024-07-17 22:10:03       23 阅读
  6. 【C++】C++中的堆和栈介绍和区别

    2024-07-17 22:10:03       25 阅读
  7. httpClient传输文件

    2024-07-17 22:10:03       22 阅读
  8. 关于Apache Iceberg

    2024-07-17 22:10:03       24 阅读
  9. lightgbm

    lightgbm

    2024-07-17 22:10:03      31 阅读
  10. ansible报错--‘when‘ is not a valid attribute for a Play

    2024-07-17 22:10:03       26 阅读