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

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

cpp 复制代码
float a = 3.14159265f;

或者

cpp 复制代码
#define t 3.14159265f;

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

cpp 复制代码
#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导致精度丢失了。

相关推荐
李永奉5 小时前
杰理可视化SDK开发-【BUG】配置“TWS两边同时按消息使能”功能后,按键单击功能无效失灵
开发语言·单片机·嵌入式硬件·物联网·bug
m0_617493945 小时前
Python OpenCV 透视变换(Perspective Transform)详解与实战
开发语言·python·opencv
程序猿编码5 小时前
用C++从零开始造一个微型GPT,不借助任何第三方库
开发语言·c++·gpt·模型推理
普通网友5 小时前
pytest一些常见的插件
开发语言·python·pytest
苦瓜花5 小时前
【Kotlin】初入门
android·开发语言·kotlin
cndes6 小时前
给Miniconda换源,让包下载更迅速
开发语言·python
LuminousCPP6 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水6 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
SuperByteMaster6 小时前
__set_MSP 和__set_MSPLIM 接口区别
c语言
铅笔侠_小龙虾7 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust