实型变量

关注
义项:计算机编程中的实数类型变量

实型变量是计算机程序中在运行期间其值可以改变、用来存放实数的变量[1]。实型又称浮点型,因而实型变量也常被称为浮点型变量,它在内存中按指数形式存放[2]。按通行的 IEEE 754 标准,实型变量可分为单精度、双精度和长双精度等类型,各类型占用的存储空间、可表示的数值范围与有效位数不同[3]。它是科学计算、图形处理和工程仿真中表示非整数数值的基本数据类型[4]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

实型变量指程序运行期间取值可以更改的实型量,与之相对的是在运行期间不允许改变取值的实型常量[1]。在 C 等语言中,定义实型变量的一般形式是先写类型说明符,再写变量名,例如 float x; 或 double a,b;[1]。同一种类型说明符后面可以并列写出多个变量名,各变量名之间用逗号分隔[1]。

按数值范围与存储方式,实型变量分为单精度型(float)、双精度型(double)与长双精度型(long double)三种,其中长双精度在实际应用中用得较少[2]。单精度通常占用 4 个字节,有效位数为 6 至 7 位,数值范围约为负 3.4×10 的 38 次方到正 3.4×10 的 38 次方;双精度通常占用 8 个字节,有效位数为 15 至 16 位;长双精度通常占用 16 个字节,有效位数为 18 至 19 位[3]。不同类别所能覆盖的区间与精度并不一致,选用时需要在精度与存储开销之间权衡[3]。

原理

实型变量的存储方式与整型变量不同,它在内存里按指数形式保存,一个实数会被拆成小数部分和指数部分分别安置[2]。当代计算机普遍依照 IEEE 754 标准描述浮点格式:单精度共 32 位,含 1 位符号位、8 位指数位和 23 位有效数位;双精度共 64 位,含 1 位符号位、11 位指数位和 52 位有效数位[5]。有效数最高位被隐含,不占用实际存储位,所以单精度与双精度的实际精度分别为 24 位和 53 位[5]。

数值由符号、指数与有效数三部分共同决定,可写作 $(-1)^{S} \times 1.M \times 2^{E-bias}$,其中 S 是符号位,M 是有效数的小数部分,E 是带偏移的指数[6]。指数以偏移形式存储,单精度要减去 127、双精度要减去 1023 才得到真实指数,这样安排便于直接比较大小[5]。位域的大致划分可表示如下:

mermaid\ngraph TD\n A["32 位单精度实型"] --> B["符号位:1 位"]\n A --> C["指数位:8 位,偏移量 127"]\n A --> D["有效数位:23 位"]\n

该标准同时规定了正负零、正负无穷大和非数字(NaN)等特殊值,并定义了溢出、下溢、除零等异常情形[6]。标准还给出若干种舍入模式,并规定每种运算的结果由输入值和运算序列唯一确定[4]。由于位宽固定,二进制无法精确表示某些十进制小数,这类数只能以近似值存入[7]。

发展历程

在统一标准出现之前,各计算机厂商自行设计浮点数的存储规则和运算细节,同一段数值程序在不同机器上可能给出不同结果,数值软件的可移植性因此很差[8]。20 世纪 70 年代末,英特尔打算为 8086 微处理器配上浮点运算协处理器,邀请加州大学伯克利分校的数值分析学家 威廉·卡韩(William Kahan) 参与浮点格式设计,卡韩又与 Jerome Coonen、Harold Stone 共同完成了一套公开方案[9]。

由于这套设计较为完善,电气与电子工程师协会决定采用与之十分接近的方案作为浮点格式标准[8]。1985 年,IEEE 754 二进制浮点运算标准正式发布,卡韩是该标准的主要架构师,因此被称为浮点数之父,并于 1989 年获得图灵奖[10]。标准定稿之前,英特尔已于 1980 年推出 8087 协处理器,其他厂商随后相继实现该标准[9]。

IEEE 754 自 20 世纪 80 年代以来一直是使用最广泛的浮点数运算标准,为许多处理器所采用[11]。该标准在 2008 年和 2019 年经过修订,补充了十进制浮点格式,并扩充了必需实现的运算种类[4]。

应用

实型变量用于需要处理小数的场合,覆盖科学计算、图形处理、工程与金融等多个领域[6]。气象预报、有限元分析与计算流体力学等数值模拟需要处理大量浮点数据,图形渲染管线中的坐标变换同样以浮点运算为基础[4]。

不同精度的实型变量对应不同任务:计算化学、分子建模等对精度要求高的复杂科学模拟通常采用双精度;图形与多媒体计算更看重速度,多采用单精度;机器学习的训练与推理则常用 16 位半精度等更短的格式以提高效率[12][13]。

多种编程语言都提供实型变量,C 与 C++ 有 float、double、long double,Java 与 C# 有 float 和 double,Fortran 则以 real 型存放浮点数[6][14]。常量后缀也会影响类型,不加后缀的浮点常量默认按双精度处理,加上 f 或 F 则按单精度处理[15]。

局限

实型变量只能用有限的二进制位表示实数,能精确表示的只是实数的一个有限子集,大多数实数以近似值存储,由此产生表示误差,并在后续运算中形成舍入误差[6]。误差会在反复运算中逐渐累积,运算顺序不同也可能得到不同结果,浮点加法不满足结合律,$(a+b)+c$ 与 $a+(b+c)$ 未必相等[16][4]。

大量十进制小数无法用二进制精确表达。以 0.1 为例,它的二进制形式是无限循环小数,存储时只能截取有限位,因此 0.1 与 0.2 相加的结果不等于 0.3,而是一个非常接近的近似值[7]。出于同样的原因,直接用等号判断两个实型变量的值是否相等往往并不可靠,在金融等要求精确结果的场合更需谨慎[6]。

当两个非常接近的数相减时会出现灾难性相消,原本有效的数位在相减中互相抵消,结果的有效数字大幅减少,甚至符号都可能出错[16]。多个量级相差悬殊的数相加时,较小的数可能因舍入而被忽略,形成大数吃小数的现象[16]。这些特性使数值算法的设计变得重要,同一数学问题沿不同计算路径求解,所得精度可能相差很大[16]。

为规避精度问题,常见做法是先把小数放大为整数参与运算,再折算回小数,或改用十进制高精度运算库[17][7]。

参见

  • 浮点数 —— 实型变量在计算机中的表示方式,通常遵循 IEEE 754 标准。

  • IEEE 754 —— 规定浮点格式、舍入规则与异常处理的国际标准。

  • 单精度浮点数 —— 常见的 32 位实数类型,对应 float。

  • 双精度浮点数 —— 常见的 64 位实数类型,对应 double。

  • 威廉·卡韩 —— IEEE 754 标准的主要架构师,被称为浮点数之父。

  • 整型变量 —— 只能存放整数的数值类型变量,与实型变量相对。

参考资料

  1. 实型变量 . baidu.com [引用日期2026-09-29]
  2. 实型变量_百度百科 . baidu.com [引用日期2026-09-29]
  3. 信奥赛一本通:实型-新东方网 . xdf.cn [引用日期2026-09-29]
  4. Floating-point arithmetic | IEEE Technology Navigator . ieee.org [引用日期2026-09-29]
  5. IEEE 浮点表示形式 . microsoft.com [引用日期2026-09-29]
  6. 浮点数 . baidu.com [引用日期2026-09-29]
  7. 为什么0.1 + 0.2 不等于 0.3 ? . aliyun.com [引用日期2026-09-29]
  8. 浮点数解析 . eepw.com.cn [引用日期2026-09-29]
  9. Palmer had obtained his Ph . ac.in [引用日期2026-09-29]
  10. 威廉·卡韩 . wikipedia.org [引用日期2026-09-29]
  11. [科普中国]-IEEE 754 . kepuchina.cn [引用日期2026-09-29]
  12. GPU在什么业务场景下用单精度,什么场景下用双精度? . zhihu.com [引用日期2026-09-29]
  13. Reproducibility and variable precision computing . davidhbailey.com [引用日期2026-09-29]
  14. Fortran的数据类型-fortran-w3cschool . w3cschool.cn [引用日期2026-09-29]
  15. C/C++入门003-C语言变量与运算符 . tencent.cn [引用日期2026-09-29]
  16. 有效数字与精度 | Bohrium . bohrium.com [引用日期2026-09-29]
  17. tencent.com.cn 上的网页 . tencent.com.cn [引用日期2026-09-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-09-29T11:50:54Z

历史版本

完成率 = 阅读完成量 ÷ 阅读量,分母是阅读量不是浏览次数 —— 关了 JS 的、秒退的都在浏览次数里、不在阅读量里。 详细口径在后台的「数据统计」页。

本条目引用的词条
IEEE 754 威廉·卡韩 Fortran 浮点数 IEEE 754 单精度浮点数 双精度浮点数 威廉·卡韩 整型变量
红色的还不存在。红链不是错误——它标出"这个概念被引用了但还没人写"。