0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机定点数据解说

冬至子 来源:落木青云 作者:一颗糯米 2023-07-31 14:47 次阅读

回顾计算机中的数字

在学习计算机基础的过程中我们已经知道计算机是基于二进制对数据进行存储和运算的。学习C语言时我们又知道了C语言中常见的数据类型有:char,int,long intsignedunsigned 整数数据,以及floatdouble型的小数数据。

或看过我之前文章的朋友肯定也明白了,无论使用何种语言编写的何种程序,最后进入处理器执行的都是一串二进制数据,是不是突然又想不明白处理器到底是怎么区分这些数据类型了?这不又绕回原来说的底层逻辑了吗,你学微机原理,学汇编指令不就是帮你解决这个问题的?回过头去研究明白了那以后何止单片机软件开发呢,芯片设计,系统、编译器开发不都能胜任了。扯远了,先回到正题。

1.jpg

对于带小数的数据也是如此,同样需要将十进制数据转为二进制,并规定其符号位,指数位以及小数位。比如IEEE.754标准(即IEEE二进制浮点数算术标准)中对float,double存储逻辑的规定:

1.jpg

定点数据

一般情况下我们会将有小数的数据称为浮点型数据,float为单精度浮点数据,double为双精度浮点数据。正如上面所说的我们计算机使用的是以浮点法保存小数型数据的。与之对应的肯定就会有以定点的方式保存小数数据的方法。

定点是指表示一个数值时,小数点之后的位数是固定的,有时候小数点之前的位数是固定的。上面用浮点表示的小数,小数点的位置不是固定的,可以根据有效位数而浮动。

图片

浮点数与定点数表示

图片

定点小数

图片

定点整数

定点数类型的值其实就是个整数,需要额外做比例进位,进多少位需要根据具体的定点数类型决定。例如 1.23 使用 1/1000 缩放系数的定点数表示时是 1230;1,230,000 使用 1000 缩放系数的定点数表示也是 1230。与浮点数不同,相同类型的定点数中所有值的缩放系数都是一致的,在计算过程中也保持不变。此表示法可以用标准的整数算术逻辑单元来进行有理数的计算。

为了效率考量,缩放系数(scaling factor)一般会是基数b(2 或是 10)的正幂次,或是负幂次,因此实际内部仍然可以用类似整数的方式处理。不过缩放系数也需依应用而定。因此许多的数字可能其数值其实是用二进制记录,但为了使用方便人类读写,缩放系数仍选择10的幂,10的幂的缩放系数也可以配合国际单位制,因为选择特定的缩放系数,可能相当于使用另外一个大小较适合的单位,例如使用厘米或微米,而不是使用米,或者是以1/3600为缩放系数的定点数来表示以小时为单位的时间值,精确到秒。

采用定点计数法时,相邻两个数之差总是等于其中一个数的值,而采用浮点计数法时,相邻数并不是均匀分布的。另外浮点计数的计数范围是比定点计数范围要大得多,并且一般场景中浮点计数精度往往也比定点计数精度高,正因为如此,一般情况下浮点计数法更适合于一般应用场景,一般老师在课堂上也不会做详细介绍,所以我们对定点数感到陌生也完全不奇怪。

所以现在大多数处理器芯片都是带有浮点运算器(FPU),只有在特殊的应用中才使用定点数运算,例如某些特定应用下的数字信号处理芯片(DSP)或一些低价的嵌入式系统微处理器MCU),这类的应用强调高需求速度,低电力需求及小集成电路区域,例如影像、视频或图片等数字信号处理,进行傅里叶变换以及数字滤波器设计,或是其他一些这种数字表示法比较适合的场景,如货币计算,仪器测量计数等,这些都是有特定的精度规则,使用浮点计数反而可能带来更大的芯片资源消耗或成本开支,并且这些情况运算速度也不如定点运算快。

1.jpg

1.jpg

当然平时使用时我们也可以编写一些特定程序对这些格式表示的数值范围进行验证。

#include < stdio.h >
#include < stdint.h >
#include < math.h >

int main()
{
    int16_t q_max = 32767; // 0x7FFF
    int16_t q_min = -32768; // 0x8000
    float f_max = 0;
    float f_min = 0;
    printf("rn");
    for (int8_t i = 15; i >=0; i--) 
    {
        f_max = (float)q_max / pow(2,i);
        f_min = (float)q_min / pow(2,i);

        printf("t|Q%dt|Q%d.%dt|%ft|%ft|rn",
               i,(15-i),i,f_max,f_min);
    }
    return 0;
}

1.jpg

定点与浮点相互转化

在一些功能复杂的处理器中会同时支持两种数据处理方式,比如STM32G4系列的芯片上携带的FMAC(filtermath accelerator)支持的定点DSP处理功能,使用的定点格式为Q1.15。

在这种既有定点运算又有浮点运算是处理器上做开发时我们不可避免的都会涉及到定点与浮点相互转化的问题,这时需要注意进行处理数据!

1.jpg

定点运算思的扩展

在某些特定情况下定点运算对算法的效率优化有着出奇的效果,如果你对这方面感兴趣不妨可以研究一下经典的快速平方根算法

另外,我们平时做单片机开发时在一些比较低端的芯片中,比如C51单片机,请切记不要轻易使用浮点运算!如果需要进行小数运算,我们可以借助定点运算是思想在程序中通过设计一定的比例系数对数据进行放大或缩小处理,从而实现某些功能。不要问我为啥,举个简单的例子,利用超声波模块测距,你自己写两个程序,一个使用浮点,一个不使用做个实验测试一下就可以知道结果是怎么的了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348826
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128803
  • 信号处理器
    +关注

    关注

    1

    文章

    239

    浏览量

    25034
  • 傅里叶变换
    +关注

    关注

    5

    文章

    415

    浏览量

    42250
  • 浮点运算器
    +关注

    关注

    0

    文章

    4

    浏览量

    5694
收藏 人收藏

    评论

    相关推荐

    点数定点数

    本帖最后由 gk320830 于 2015-3-5 23:17 编辑 数制,浮点数定点数的文档,上数电时老师给的。有兴趣的同学可以来看看
    发表于 03-27 21:31

    【安富莱——DSP教程】第7章 DSP定点数和浮点数(重要)

    第7章DSP定点数和浮点数(重要) 本期教程主要跟大家讲解一下定点数和浮点数的基础知识,了解这些基础知识对于后面学习ARM官方的DSP库大有裨益。特别是初学的一定要理解这些基础知识。
    发表于 06-03 11:47

    第7章 DSP定点数和浮点数

    。7.1.2 浮点数计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数定点数(Fixed Point Number)。在这种表达方式中,小数点固定的位于实
    发表于 09-22 13:02

    请问28335浮点数使用IQmath转换后当定点数计算快还是用浮点数进行计算快?28335可以定点浮点混合编程吗?

    本帖最后由 一只耳朵怪 于 2018-6-14 11:52 编辑 28335为浮点DSP ,现在假如我采用两种方法:1.浮点数使用IQmath转换后当定点数计算2.直接用浮点数
    发表于 06-14 05:59

    6618虚拟定点数学库IQmath

    最近需要在6618上做速度优化,准备采用定点代替浮点的方式,但是没有找到针对66X系列的虚拟定点数学库。采用C64+系列的定点虚拟库代替,发现32bit数据的乘法速度竟然比直接进行浮点
    发表于 06-21 11:23

    verilog程序定点数的资料

    verilog程序中需要用到定点数,用浮点数太复杂。。。有谁有关于定点数比较系统的资料吗。。。我找到黑金的教程,是关于浮点数运算的verilog实现,很详细,先传上来 Verilog
    发表于 03-27 06:35

    DSP功能函数-定点数互转

    第17章 DSP功能函数-定点数互转本期教程主要讲解功能函数中的Q7,Q15和Q31分别向其它类型数据转换。目录第17章 DSP功能函数-定点数互转17.1 初学者重要提示17.2 DSP基础运算指令17.3 ...
    发表于 08-11 08:04

    定点数运算中产生溢出的原因是什么

    冯·诺依曼机工作方式的基本特点是什么?计算机系统中采用补码运算的目的是什么?在定点二进制运算器中,减法运算一般通过什么来实现?在定点数运算中产生溢出的原因是什么?和外存储器相比,内存储器的特点是什么?
    发表于 08-11 08:44

    功能函数中的浮点数转换为定点数

    第16章 DSP功能函数-数据拷贝,数据填充和浮点转定点本期教程主要讲解功能函数中的数据拷贝,数据填充和浮
    发表于 08-17 07:37

    定点数和浮点数的区别是什么

    定点数和浮点数的区别目的:理解定点数和浮点数在傅里叶变换(FFT)的实际应用中的选择单片机中如果需要进行一定的运算(常见的傅里叶变换)时,需要在不同情况下对AD采集的
    发表于 02-21 07:22

    请问ADSP-21469的汇编指令集ISA/VISA中有没有专门用来进行浮点数定点数转换的指令?

    得到的ADC数据需要进行定点数到浮点数的转换,为了节省开销,想使用汇编程序进行定点和浮点之间的转换。请问ADSP-21469的汇编指令集ISA/VISA中有没有专门用来进行浮
    发表于 11-29 08:03

    LabVIEW中定点数有什么用途?LabVIEW中定点数应用解析

    什么是定点数 顾名思义,在运算中小数点始终不会发生移动的数就是定点数。对于定点数,我们定义了其一共占有的bit位数以及小数点的位置,不同格式的定点数可以表达的
    发表于 11-16 13:04 7961次阅读
    LabVIEW中<b class='flag-5'>定点数</b>有什么用途?LabVIEW中<b class='flag-5'>定点数</b>应用解析

    在FPGA里浮点数定点数表示法原理展示

    点数定点数表示法是我们在计算机中常用的表示方法 所以必须要弄懂原理,特别是在FPGA里面,由于FPGA不能像在MCU一样直接用乘除法。 首先说一下简单的定点数
    发表于 11-18 02:15 8453次阅读
    在FPGA里浮<b class='flag-5'>点数</b>与<b class='flag-5'>定点数</b>表示法原理展示

    定点数和浮点数在STM32单片机中使用傅里叶(FFT)变换的理解

    定点数和浮点数的区别目的:理解定点数和浮点数在傅里叶变换(FFT)的实际应用中的选择单片机中如果需要进行一定的运算(常见的傅里叶变换)时,需要在不同情况下对AD采集的
    发表于 12-24 19:22 16次下载
    <b class='flag-5'>定点数</b>和浮<b class='flag-5'>点数</b>在STM32单片机中使用傅里叶(FFT)变换的理解

    FPGA定点数截位的基本准则

    FPGA内部表示正负数,小数的规则。两者相比之下,定点数实现简单,表达更为直观,所以在很多时候FPGA通常使用定点数表示小数。
    发表于 06-19 10:44 744次阅读
    FPGA<b class='flag-5'>定点数</b>截位的基本准则