当前位置: 首页 > news >正文

【07】C语言中的浮点类型详解

【07】C语言中的浮点类型详解

文章目录

  • 1. 基本浮点类型
    • 1.1 float(单精度浮点型)
    • 1.2 double(双精度浮点型)
    • 1.3 long double(扩展精度浮点型)
  • 2. 浮点数的表示
    • 2.1 浮点数的特性
    • 2.2 浮点数的使用
    • 2.3 代码示例
  • 3. 浮点数的输入输出

C语言提供了三种主要的浮点类型,每种类型有不同的精度和范围。


1. 基本浮点类型

1.1 float(单精度浮点型)

  • 大小:通常4字节(32位)
  • 精度:约6-7位有效数字
  • 范围:约±1.2×10⁻³⁸到±3.4×10³⁸
  • 后缀:f或F(如3.14f)
  • 示例
    float pi = 3.1415926f;
    

1.2 double(双精度浮点型)

  • 大小:通常8字节(64位)
  • 精度:约15-16位有效数字
  • 范围:约±2.3×10⁻³⁰⁸到±1.7×10³⁰⁸
  • 默认类型浮点字面量默认为double
  • 示例
    double distance = 149.6e6;  // 科学计数法表示地球到太阳的距离(1.496亿公里)
    

1.3 long double(扩展精度浮点型)

  • 大小:通常10字节(80位)或16字节(128位),取决于具体的编译器和平台实现。
  • 精度:至少与double相同,通常更高
  • 范围:比double更大
  • 后缀:L或l
  • 示例
    long double precise_value = 3.141592653589793238L;
    

2. 浮点数的表示

浮点数在内存中按照IEEE 754标准(大多数平台)存储,分为三个部分:

  1. 符号位(1位):0表示正数,1表示负数
  2. 指数部分:存储科学计数法中的指数
  3. 尾数部分:存储有效数字

2.1 浮点数的特性

  1. 精度问题

    float a = 0.1f;
    float b = 0.2f;
    float c = a + b;
    printf("%.20f\n", c);  // 可能输出0.30000001192092895508而不是精确的0.3
    
  2. 特殊值

    • 无穷大(INFINITY):inf
    • 非数字(NaN):nan
    • 可以使用<math.h>中的宏如isinf()isnan()检测
  3. 舍入误差

    • 浮点数运算可能产生舍入误差
    • 比较浮点数时不应使用==,而应比较差值是否小于某个小值(如1e-6)

2.2 浮点数的使用

  1. 默认使用double,除非有特殊的内存限制。
  2. 避免直接比较浮点数是否相等。
  3. 注意浮点运算的精度损失。
  4. 科学计算使用long double可获得更高精度。
  5. 使用标准库函数(如<math.h>)进行数学运算。

2.3 代码示例

#include <stdio.h>
#include <math.h>
#include <float.h>int main() {// 打印各类型的范围和精度信息printf("float 大小: %zu 字节\n", sizeof(float));printf("float 最小正值: %e\n", FLT_MIN);printf("float 最大值: %e\n", FLT_MAX);printf("float 精度位数: %d\n", FLT_DIG);printf("\ndouble 大小: %zu 字节\n", sizeof(double));printf("double 最小正值: %e\n", DBL_MIN);printf("double 最大值: %e\n", DBL_MAX);printf("double 精度位数: %d\n", DBL_DIG);// 浮点数运算示例double x = 0.1;double y = 0.2;double z = x + y;printf("\n0.1 + 0.2 = %.20f\n", z);  // 显示精度问题// 正确的浮点数比较方法if (fabs(z - 0.3) < DBL_EPSILON) {printf("0.1 + 0.2 等于 0.3 (在浮点精度范围内)\n");} else {printf("0.1 + 0.2 不等于 0.3 (由于浮点精度限制)\n");}// 特殊浮点值double inf = 1.0 / 0.0;double nan = 0.0 / 0.0;printf("\n无穷大: %f\n", inf);printf("非数字: %f\n", nan);// 检测特殊值printf("isinf(inf): %d\n", isinf(inf));printf("isnan(nan): %d\n", isnan(nan));return 0;
}

输出结果:

float 大小: 4 字节
float 最小正值: 1.175494e-38
float 最大值: 3.402823e+38
float 精度位数: 6double 大小: 8 字节
double 最小正值: 2.225074e-308
double 最大值: 1.797693e+308
double 精度位数: 150.1 + 0.2 = 0.30000000000000004441
0.1 + 0.2 等于 0.3 (在浮点精度范围内)无穷大: inf
非数字: nan
isinf(inf): 1
isnan(nan): -1

3. 浮点数的输入输出

  • 使用%f格式化输出float和double
  • 使用%Lf格式化输出long double
  • 使用科学计数法输出:%e%E
  • 自动选择最短表示:%g%G
double d = 123.456;
printf("%f\n", d);    // 123.456000
printf("%.2f\n", d);  // 123.46
printf("%e\n", d);    // 1.234560e+02
printf("%g\n", d);    // 123.456

输出结果:

123.456000
123.46
1.234560e+02
123.456

http://www.dtcms.com/a/529777.html

相关文章:

  • 营销型网站代理网站上面的水印怎么做
  • 西安网站建设推荐q479185700上墙wordpress 已登录用户登录
  • 创新的南昌网站设计yandx引擎入口
  • 大兴安岭网站制作wordpress备份方法
  • 哪个网站做任务钱给得多小米的网站是哪个公司做的
  • 湖南省网站设计公司义乌网站备案
  • 网站建设人员招聘要求发布项目信息的平台
  • 输出时序分析之约束(十二)
  • 网站建设拾金手指下拉二十哪个兄弟来个直接看的网站
  • 详解C++中的文件系统
  • 《3D端游开放世界载具物理交互优化实践日志》
  • 网站空间与服务器北京做网站设计招聘
  • 如何做网站数据库房地产大数据获客软件
  • 同ip网站有什么影响莆田网站关键词优化
  • 网站logo做黑页google chrome谷歌浏览器
  • 做网站意义和目的羊毛网站建设视频
  • 网站用图怎么做文件小质量高品牌网站建设 磐石网络官方网站
  • 广州教育学会网站建设网站建设培训心得体会
  • 网站数据分析平台做外贸 网站邮箱申请
  • 怎么看网站有没有做竞价c2c模式是什么
  • 百度下载速度巨慢怎么办
  • KickPi RK3568平台SPI内核驱动开发
  • 帝国cms做网站流程苏州网站定制
  • 免费摄影网站推荐室内装修设计软件排行榜
  • 建一个动物网站怎么做网站建设万网
  • Spring自动组件扫描全解析
  • 七牛搭建网站天津网站建设服务公司
  • 高新区网站开发小白怎么做跨境电商
  • 门户网站建设工作情况汇报影楼网站推广
  • 做网站流量怎么赚钱旅游网站建设服务对象