定点数和浮点数

在选择计算机的数据表示方式时,通常需要考虑4点因素:要表示的数据类型(整数,小数,实数和复数)数值范围精确度数据存储和处理所需要的硬件代价计算机处理的数据多带有小数点,小数点在计算机中可以有两种方法表示;一种数约定数值的小数点固定在某一位置,称为定点表示法,简称为定点数。对应的另一种方法,小数点可以任意浮动,称为浮点表示法,简称为浮点数。1. 定点数表示法(fixed-point)所谓定点,就是约定机器中数据的小数点位置固定不变。在计算机中,通常将数据的小数点固定在数据的最高位之前或者最低位之后。前者称为定点小数,后者称为定点整数。定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据 x 的形式为 x = x0.x1x2…xn ( 其中x0为符号位,x1~xn是数值的有效部分,也称为尾数, x1为最高有效位 ),则在计算机中的表示形式为:

定点小数一般说来,如果最末位 xn = 1,前面各位都为 0 ,则数的绝对值最小,即 |x|min = 2^(-n) 。如果各位均为 1,则数的绝对值最大,即 |x|max =1-2^(-n) 。所以定点小数的表示范围是:

定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据 x 的形式为 x = x0 x1x2…xn ( 其中x0为符号位,x1~xn 是尾数, xn 为最低有效位 ),则在计算机中的表示形式为:

定点整数定点整数的表示范围是:

当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原成实际数值。若比例因子选择不当,往往会使运算结果产生溢出或降低数据的有效精度。用定点数进行运算处理的计算机被称为定点机。2. 浮点数表示法(floating-point number)与科学计数法相似,任意一个J进制数N,总可以写成:

式中M称为数 N 的尾数(mantissa),是一个纯小数;E 为数 N 的阶码(exponent),是一个整数,J称为比例因子 J^(E)的底数。这种表示方法相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点表示法。底数是事先约定好的(常取2),在计算机中不出现。在机器中表示一个浮点数时,一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。二是要给出阶码,用整数形式表示,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也要有符号位。因此一个机器浮点数应当由阶码和尾数及其符号位组成:

其中 ES 表示阶码的符号,占一位,E1~En 为阶码值,占 n 位,尾符是数 N 的符号,也要占一位。当底数取 2 时,二进制数 N 的小数点每右移一位,阶码减小 1,相应尾数右移一位;反之,小数点每左移一位,阶码加 1,相应尾数左移一位。若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如 11.01 也可以表示成 0.011012^(-3) ,0.1101×2^(-2) 等等。为了提高数据的表示精度,当尾数的值不为 0 时,其绝对值应大于等于 0.5,即尾数域的最高有效位应为 1,否则要以修改阶码同时左右移小数点的方法,使其变成这一要求的表示形式,这称为浮点数的规格化表示。当一个浮点数的尾数为 0 时,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成 0 值,称为机器零*。浮点数所表示的范围比定点数大。假设机器中的数由 8 位二进制数表示(包括符号位):在定点机中这 8 位全部用来表示有效数字(包括符号);在浮点机中若阶符、阶码占 3 位,尾符、尾数占 5 位,在此情况下,若只考虑正数值,定点机小数表示的数的范围是 0.0000000 到 0.1111111,相当于十进制数的 0 到 127/128,而浮点机所能表示的数的范围则是 2 - 11×0.0001 到 211×0.1111,相当于十进制数的 1/128 到 7.5 。显然,都用 8 位,浮点机能表示的数的范围比定点机大得多。尽管浮点表示能扩大数据的表示范围,但浮点机在运算过程中,仍会出现溢出现象。下面以阶码占 3 位,尾数占 5 位(各包括 1 位符号位)为例,来讨论这个问题。图 2-1 给出了相应的规格化浮点数的数值表示范围。

规格化浮点数分布示意图图 中,“可表示的负数区域”和“可表示的正数区域”及“0”,是机器可表示的数据区域;上溢区是数据绝对值太大,机器无法表示的区域;下溢区是数据绝对值太小,机器无法表示的区域。若运算结果落在上溢区,就产生了溢出错误,使得结果不能被正确表示,要停止机器运行,进行溢出处理。若运算结果落在下溢区,也不能正确表示之,机器当 0 处理,称为机器零。一般来说,增加尾数的位数,将增加可表示区域数据点的密度,从而提高了数据的精度;增加阶码的位数,能增大可表示的数据区域。FromHere.

(0)

相关推荐

  • 【精选博文】FPGA定点小数计算(一)

    所谓定点小数,就是小数点固定地隐含在某一位置上的数据.由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了).而小数的具体位置则完全是由程序设计者自己决定的,因此,对 ...

  • 小数在计算机中的存储形式

    本篇的目的就是为了让更多的人了解浮点数存储的基本原理,还是那句话,学习的同时带着思考.同样这里不讨论浮点数的精度损失和数值的计算理论.直接讲实质的表现. 上节讲到,C语言中的小数可以使用指数形式来表示 ...

  • 【精品博文】FPGA定点小数计算(Verilog版)第五篇——浮点小数转换为定点小数

    用FPGA实现定点运算,相对于浮点运算来说,开销要小很多(时间上和空间上的).但是在某些特定的场合,如多机协同处理等,要求FPGA的输入数据(或者是输出数据)为浮点形式的数据,这是就需要我们来做一个浮 ...

  • c++开发之stringstream处理浮点数长度问题

    stringstream,istringstream,ostringstream区别 stringstream:同时支持c风格字符串的输入输出操作 istringstream:用于执行c风格字符串的输 ...

  • C#基于NModbus实现MODBUSTCP字符串、浮点数读写

    引用NModbus 在NuGet搜索NModbus,添加引用. 封装ModbusTcp类 public class ModbusTCP { private ModbusFactory modbusFa ...

  • 程序员必知之浮点数运算原理详解

    导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握.许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题. 许多人使用float/double进行货币计算时经常会 ...

  • “关于浮点数详解”乐创DIY C语言讲义​——1.4节 1.5节

    这一章节里面公式比较多,不支持编辑,所以截图上传,等我第一章写完之后,我会把高清版的PDF奉上,各位看官老爷见谅.二进制和其他进制的转换,虽然现在转换起来非常简单,大家打开Windows操作系统的计算 ...

  • Simulink中浮点数的优化表示法

    本次内容[思想]将带大家认识Simulink定点数,下面将分别介绍定点数的理论基础.Simulink中实现过程及定点数的应用场合. 1 理论基础 在介绍定点数之前,需要先科普下计算机中的数据(整形.浮 ...

  • 一个由跨平台产生的浮点数bug | 有你意想不到的结果

    码农唐磊 程序猿石头 本文为 6 年前的旧文整理重发,因为最开始是 workdpress 的程序,后改为静态 blog 过程中导致格式等混乱,这篇年久失修旧文可文末点击原文访问. 问题背景 背景就简单 ...

  • 处理Excel浮点数

    大家好,今天来和大家讲讲Excel浮点数.在Excel表格中,有时候我们会发现有些常见的数字或者计算公式的结果不是我们预想的,经常混迹于财务的朋友们应该有所体会.我们先来看两个经典的例子:    1. ...

  • 整数、浮点数在内存中的存储规则

    为什么我们代码将浮点数.整数进行强制转换,或打印输出时会出精度损失,或出错的情况? 想要搞明白这个问题,就需要了解一下整数.浮点数的存储规则. 嵌入式专栏 1 浮点数存储规则 根据国际标准IEEE(电 ...

  • Java实现简单计算器(四则运算,括号,浮点数)

    用堆栈把输入的中缀表达式转化为后缀表达式,然后计算.用的是数据结构里的代码:表达式转换(中缀表达式转为后缀表达式) import java.awt.Container;import java.awt. ...