精华内容
下载资源
问答
  • 他表示一数字
    千次阅读
    2019-05-24 22:59:13

    问题说明:

            实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如:“+100”,“5e2”,“-123”,“-1e-16”,“2.345E9”都可表示数字,"12e","1a3.14","1.2.3","12e+5.4" 都不能表示数字。

    分析:

            可将表示数字的字符串抽象为:A [[.B]] [E|eC]   或者     .[B][E|eC]

    其中:AC 都是可能以 ‘+’或者 '-' 开头的0~9的数位串

              B 也是0~9的数位串,但是前不能有 ‘+’或者 '-'

      代码思路

             判断是否满足上述模式时,首先尽可能多的扫描0~9的数位即达到 A 部分,遇到“.”则开始扫描 B 部分,遇到“E”或者“e”则开始扫描 C 部分。

    代码实现:

    bool scanUnsignedInteger(const char **str)
    {
    	const char* before = *str;
    	while (**str != '\0' && **str >= '0' && **str <= '9')
    		++(*str); 
    
    	//当str中存在若干0~9的数字时,返回true
    	return *str > before; //*str > before表示区间有若干数
    }
    
    bool scanInteger(const char **str) 
    {
    	if (**str == '+' || **str == '-')
    		++(*str);
    	return scanUnsignedInteger(str);
    }
    
    bool isNumeric(const char *str)
    {
    	if (str == NULL)
    		return false;
    	bool numeric = scanInteger(&str); //要修改指针的指向,传二级指针
    
    	if (*str == '.')
    	{
    		++str; //跳过 .
    
    		//代码用 || 的原因:
    		//1. 小数点可以没有整数部分,如 .123等于0.123
    		//2. 小数点后面没有数字,如 233. 等于 233.0
    		//3. 当然小数点前后都可以有数字,如 1.2
    		numeric = scanUnsignedInteger(&str) || numeric;
    	}
    
    	if (*str == 'e' || *str == 'E')
    	{
    		++str; //跳过e|E
    
    		//用&&的原因:
    		//当e之前无数字时,整个字符串不能表示数字,例如: E-1,e9 都不可以
    		//当e后面无数字时,整个字符串不能表示数字,例如:12E,1e 都不可以
    		numeric = numeric && scanInteger(&str);
    	}
    
    	return numeric && *str == '\0'; //当字符串到尾,且前面为真则真;即使前面为真后面不在字符串结尾就证明不是数字(例子: +1.2E-3PP)
    }

     

    更多相关内容
  • python数字表示

    千次阅读 2020-02-08 23:05:48
    科学计数法 四舍五入 round() 方法返回浮点数x的四舍五入值。第二个参数就是保留几个...eval()可以运算,不能用于先导0的数字 类型转换 int(x [,base]) ⇒ 将x转换为个十进制的整数 long(x [,base]) ............

    在这里插入图片描述

    科学计数法

    在这里插入图片描述

    四舍五入

    round() 方法返回浮点数x的四舍五入值。第二个参数就是保留几个小数,默认为0。如果不填第二个参数返回的是整数,否则类型与一样
    int则是剪去小数部分,只保留前面的整数,即向零取整
    int()不可以用于非整数的字符串
    eval()可以运算,不能用于先导0的数字
    在这里插入图片描述

    类型转换

    int(x [,base]) ⇒ 将x转换为一个十进制的整数 
    long(x [,base]) ⇒ 将x转换为一个十进制的长整数 
    float(x) ⇒ 将x转换为一个浮点数 
    str(object) ⇒ 转换为字符串 
    repr(object) ⇒ 转换为表达式字符串 
    eval(str) ⇒ 用来计算在字符串中的有效Python表达式,并返回一个对象 
    tuple(seq) ⇒ 将序列seq转换为一个元组 
    list(seq) ⇒ 将序列seq转换为一个列表 
    chr(x ) ⇒ 将一个整数转换为一个字符 
    unichr(x ) ⇒ 将一个整数转换为Unicode字符 
    ord(x ) ⇒ 将一个字符转换为它的整数值 
    hex(x ) ⇒ 将一个整数转换为一个十六进制字符串 
    oct(x ) ⇒ 将一个整数转换为一个八进制字符串
    

    更多

    在这里插入图片描述

    
    # 16->2,8,10
    a=int(input("16->2,8,10:"),base=16)
    print("2:{:b}\n8:{:o}\n10:{:d}".format(a,a,a))
    
    # 10->2,8,16
    a = int(input("请输入一个十进制整数:"))
    print("其对应二进制为{:b}\n八进制为{:o}\n十六进制为{:x}".format(a,a,a))
    
    
    # 8->2,8,10
    a = int(input("请输入一个八进制整数:"),base=8)
    print("其对应二进制为{:b}\n八进制为{:o}\n十进制为{:d}".format(a,a,a))
    
    
    # 2->8,10,16
    a = int(input("请输入一个二进制整数:"),base=2)
    print("八进制为{:o}\n十进制为{:d}\n其对应十六进制为{:x}".format(a,a,a))
    

    在这里插入图片描述

    基本运算

    在这里插入图片描述
    divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数
    在这里插入图片描述

    整数除运算符号 和 求余运算符 的分析

    • 整数除运算符号
    >>> 9 // 4
    2
    >>> 9 // -4
    -3
    >>> -9 // 4
    -3
    >>> -9 // -4
    2
    

    原则:运算式 a // b,被除数 a ,除数 b , 余数c (a/b = k + c )需要在a到0范围内

    9 = 4 * 2 + 1 =》 2    
    9 = -4 * -3 - 3 =》 -3
    -9 = 4 * -3 + 3  =》 -3
    -9 = -4 * 2 - 1  =》 2
    
    • 求余运算符(需要结合上面的整数除运算)
    >>> 9 % -4
    -3
    >>> -9 % 4
    3
    >>> (-9) % (-4)
    -1
    >>> -9 - ( -4 * 2)
    -1
    

    原则:
    a%b=a-b倍数=a-b (a//b)= 余数c
    也就是说,a对b取余就是计算a最多可以容纳多少个b,多出来的那部分就是余数。

    # 9 % -4
    9 = -4 * -3 - 3 =》 k=-3
    9 - (-4) * -3 = -3 => c = -3
    
    # -9 % 4
    -9 = 4 * -3 + 3  => k = -3
    -9 - 4 * -3  = 3  => c = 3
    

    数学函数

    需要

    import math
    

    在这里插入图片描述
    还有math.degrees(x) 弧度-》角度
    math.radians(x) 角度-》弧度
    math.pi,math.e
    对比 :
    int()函数是“向0取整”,取整方向总是让结果比小数的绝对值更小
    “整除”符号运算将结果忠实地向下取整,与math.floor()处理结果一样

    如果我们坚持将值域限定为实数,并使用其近似的浮点数实现,就无法计算负数的平方根。
    负数的平方根为虚数,而由实部和虚部组成的数为复数。Python标准库提供了一个专门用于处理
    复数的模块。
    >>> import cmath 
    >>> cmath.sqrt(-1) 
    1j
    注意到这里没有使用from ... import ...。如果使用了这种import命令,将无法使用常规函
    数sqrt。类似这样的名称冲突很隐蔽,因此除非必须使用from版的import命令,否则应坚持使用
    常规版import命令。
    

    常用函数

    abs()
    max() min()
    pow(a,b)
    round(x)
    round(x,n)保留小数点后n位
    常用更多函数

    随机函数

    在这里插入图片描述

    函数范围

    在这里插入图片描述
    在这里插入图片描述

    字符串的转换

    Python 使用了
    ord() 函数返回单个字符的编码,
    chr() 函数把编码转成相应字符。

    转移符号

    在这里插入图片描述

    运算符

    在这里插入图片描述

    字符串的用法特例

    在这里插入图片描述

    >>> eval(str(19)+'1')
    191
    >>> eval((str(19))+'+1')
    20
    

    格式化

    在这里插入图片描述
    格式:format(,item,format-specifier)

    >>> print(format(1.2300,'1.3f'))
    1.230
    >>> print(round(1.23,2))
    1.23
    >>> print(round(1.2301,3))
    1.23
    

    <左对齐
    字符串默认左对齐
    数字默认右对齐

    格式化%s %d %f

    %s

    
    # %s
    print("%s")
    string="HelloWorld"
    # 1: %2s意思是字符串长度为2,当原字符串的长度超过2时,按原长度打印,所以%2s的打印结果还是helloWorld
    print("string=%2s"%string)
    print("string=%12s"%string)
    print("string=%-12s\n"%string)
    
    print("string="+format(string,"12s"))
    print("string="+format(string,"<12s"))
    print("string="+format(string,">12s"))
    print()
    
    # 2: %.2s意思是截取字符串的前2个字符,所以%.2s的打印结果是he
    print("string=%.2s\n" % string)     # output: string=He
    
    # 3: %a.bs这种格式是上面两种格式的综合,首先根据小数点后面的数b截取字符串,
    #当截取的字符串长度小于a时,还需要在其左侧补空格
    print("string=%7.2s\n" % string)           # output: string=     He
    
    # 4: 还可以用%*.*s来表示精度,两个*的值分别在后面小括号的前两位数值指定
    print ("string=%*.*s\n" % (7,2,string)  )    # output: string=     He
    

    在这里插入图片描述

    %d

    # %d
    print("%d")
    num=110
    # 1:    %1d意思是打印结果为1位整数,当整数的位数超过1位时,按整数原值打印,所以%1d的打印结果还是110
    print("num=%1d"%num)
    # 2:    %4d意思是打印结果为4位整数,当整数的位数不够4位时,在整数左侧补空格,所以%3d的打印结果是 110
    print("num=%4d"%num)
    # 3:     %-4d意思是打印结果为4位整数,当整数的位数不够4位时,在整数右侧补空格,所以%3d的打印结果是110
    print("num=%-4d"%num)
    # 4       %05d意思是打印结果为5位整数,当整数的位数不够5位时,在整数左侧补0,所以%05d的打印结果是00110
    print ("num=%05d" % num )
    # 5:      %.4d小数点后面的4意思是打印结果为4位整数,当整数的位数不够4位时,在整数左侧补0,所以%.4d的打印结果是0110
    print ("num=%.4d" % num )
    # 6:     %.004d小数点后面的0044一样,都表示4,意思是打印结果为4位整数,
    print( "num=%.004d" % num)       # output: num=0110
    # 7:    %5.4d是两种补齐方式的综合,当整数的位数不够4时,先在左侧补0,还是不够5位时,再在左侧补空格,
    #规则就是补0优先,最终的长度选数值较大的那个,所以%5.4d的打印结果还是num= 0110
    print ("num=%5.4d" % num)
    # 8:    %05.4d是两种补齐方式的综合,当整数的位数不够4时,先在左侧补0,还是不够5位时,    
    #由于是05,再在左侧补0,最终的长度选数值较大的那个,所以%05.4d的打印结果还是num=00110    
    print("num=%05.4d" % num) # output:num= 0110
    # 9:    还可以用%*.*d来表示精度,两个*的值分别在后面小括号的前两位数值指定
    #如下,不过这种方式04就失去补0的功能,只能补空格,只有小数点后面的3才能补0
    print( "num=%*.*d" % (0o5, 4, num)) # output: num= 0110
    print( "num=%*.*d" % (5, 4, num)) # output: num= 0110
    

    在这里插入图片描述

    %f

    print("%f")
    import math
    #%a.bf,a表示浮点数的打印长度,b表示浮点数小数点后面的精度    
    # 1:    只是%f时表示原值,默认是小数点后5位数    
    print("PI=%f"%math.pi )# output: PI=3.141593    
    # 2:    #只是%9f时,表示打印长度9位数,小数点也占一位,不够左侧补空格 
    print("PI=%9f"%math.pi)                # output: PI= 3.141593 
    # 3:    只有.没有后面的数字时,表示去掉小数输出整数,03表示不够3位数左侧补0
    print("PI=%03.f"%math.pi)              # output: PI=003
    # 4:    %6.3f表示小数点后面精确到3位,总长度6位数,包括小数点,不够左侧补空格    
    print("PI=%6.3f"%math.pi)               # output: PI=_3.142    
    # 5:    %-6.3f表示小数点后面精确到3位,总长度6位数,包括小数点,不够右侧补空格 
    print("PI=%-6.3f"%math.pi)               # output: PI=3.142
    # 6:    还可以用%*.*f来表示精度,两个*的值分别在后面小括号的前两位数值指定  
    #如下,不过这种方式06就失去补0的功能,只能补空格  
    print("PI=%*.*f" % (0o6, 3, math.pi))               # output:PI= 3.142
    print("PI=%*.*f" % (6, 3, math.pi))               # output: PI= 3.142
    
    

    在这里插入图片描述

    Python3.6同时输入多个值

    1. 同时输入多个字符串,字符串间以逗号间隔

    a,b,c=input(‘三个字符串:’).split(‘,’) #得到字符串

    a,b,c=eval(input(‘三个数字:’))# 得到整数

    2. 同时输入多个数值,字符串间以空格间隔

    a,b,c=map(eval,input(‘三个数字:’).split()) # 得到整数
    a,b,c=input(‘三个字符串:’).split() #得到字符串

    由于input( )输出的是用空格分开的字符串,split( )会分割开各个值并放到列表中,此时在列表中的值是字符串,如果要用于运算必须在map( )中利用int( )或者float( )等处理,再赋值。如果需要赋值的值都是字符串的话就没必要用map函数了。

    处理浮点数存储的不精确性

    计算机采用二进制存储浮点数时是不精确的,可能会存在误差
    解决方案:导入模块decimal或fractions
    其中,模块Decimal用于处理十进制的浮点数,模块Fractions用于处理分数

    print(1.1 + 2.2 - 3.3)
    print(1.1 + 2.2)
    
    from decimal import Decimal
    print(Decimal('1.1') + Decimal('2.2') - Decimal('3.3'))
    
    from fractions import Fraction
    print(Fraction(11, 10) + Fraction(22, 10) - Fraction(33, 10))
    
    
    

    在这里插入图片描述

    展开全文
  • 基于 FPGA 的数字表示

    万次阅读 2018-11-13 17:35:41
    文章目录基于 FPGA 的数字表示零、计数系统框架 、整数的表示1.1 二进制反码1.2 二进制补码二、 非整数值的表示2.1 定点二进制数2.2 定点量化2.4 小数部分截断2.5 种不同的方法 Trounding三、 浮点数定义及表示...

    基于 FPGA 的数字表示



      在FPGA系统中有两个基本准则非常重要,分别为:数字表示法和代数运算的实现。本博文主要介绍数字表示。
      参考文献:数字信号处理的FPGA实现(第3版)中文版 && 基于FPGA的数字信号处理 [高亚军 编著] 2015年版
      可以购买相关书籍进行研读。



    零、计数系统框架

    在这里插入图片描述


    一 、整数的表示

      数字信号处理中需要考虑的基本要点是数字的表示,数字信号处理需要将量值用有限精度的数字表示。 一方面,该表示必须足够准确地处理数字信号处理系统中真实世界的输入和输出; 另一方面, 该表示必须在硬件实现方面具有高效性。
      二进制数的使用是任何数字系统的基础, 当处理大型复杂的 DSP 系统时, 每秒将需要处理数十亿次的乘加运算。 因此, 通过减少位数来降低硬件开销的方法将变得非常有意义。
      假设有一个使用 16 位分辨率运算的 DSP 滤波应用, 因此对于一个 16 位乘 16 位并行乘法 , 硬件开销的量级为 16 X 16 = 256 个单元。 使用 16 位字长的原因是它就是 DSP处理器通常使用的字长, 鉴于习惯仍然选择一样的字长。 在 FPGA世界中可以选择分辨率。 因此, 如果说 9 位分辨率已经足够了, 乘法器的硬件开销即为 9 X 9= 81 个单元。 这大约是使用 16 位计算开销的 30%。
      因此正确选择字长很重要: 使用太多位浪费硬件资源, 而太少则会损失分辨率。 所以, 保证选择正确的字长的前提是掌握算法和 DSP 知识。

    1.1 二进制反码

      可使用二进制反码描述正数和负数。 求一个数的反码只需对所有的位取反。 然而需要注意, 当使用反码时, 有两种表示数字 0 的方法, 通常来说, 用反码并不能直接表示算术运算。
      当在这种数字系统中执行二进制运算时, 将遇到奇怪的问题, 这是由于数字 0 有两个表示版本。 事实上,-0 小于+0,这是由于使用反码表示时: -0+ 1 =+0;+0 -1=-0。
      实现上述功能需要相当复杂的硬件。 实际需要的是这样一种系统, 其处理正数和负数与处理无符号数字一样, 不需要增加硬件的复杂性。
      反码实际上从来没有在实时 DSP 或数字系统中使用过, 但是它能够引出标准形式的二进制补码的概念。

    1.2 二进制补码

      对于+0 和-0 来说, 更加合理的数字系统为只有一个 0 的二进制补码。 表 1.1 给出了二进制补码的表示。
      生成 0 的第 9 位可被忽略, 注意用二进制补码可以表示- 128,但不能表示+ 128。在对正值取反时, 会发现需要用第 9 位表示负零。 然而, 如果简单地忽略这个第 9 位 , 那么这个负零与正零的表示将完全相同。
    在这里插入图片描述

      注意在数值系统中, 每个位置上阶的意义。 例如对于十进制 156 来说:
    在这里插入图片描述
      也就是说字符串“156”代表数字 156,它是每个位置上的值与其阶的乘积的和。
      如表1.2 所示, 这个规则对二进制数也同样适用。 如表 1.3 所示, 对于二进制补码整数, 如果将最左列考虑为负值, 则结果同样适。
    在这里插入图片描述


    二、 非整数值的表示

      在数字信号处理系统中, 经常希望描述诸如正弦波的信号, 显然需要处理非整数数值的情况。 对这种非整数值要求的一种可能的解决办法是允许正弦波幅度按比例增加并以整数形式来表示。
      这种方法很常见, 但在某些情况下, 需要表示 0~1 之间的数值, 也需要表示整数之间的数值。用十进制表示小数很容易。 通过引入十进制小数点来描述非整数, 并在小数点的右边插人数字。 例如:
    在这里插入图片描述
    在式中, 字符串“10.34”代表数字 10. 34 ,即 10 的乘方的倍数的总和。
      同样地, 可以对二进制数执行同样的运算:

    在这里插入图片描述

    在式屮, 字符串“10.01”表示数字 2.25,即 2 的乘方的倍数的总和。

    2.1 定点二进制数

      定点数就是二进制小数点在固定位罝的数。 二进制小数点左边部分的位被定义为整数位, 而该点右边部分的位被定义成小数位。 举例来说: “101.01011”有 3 个整数位, 5个小数位。如表 2.1 所示, 定点数按类似的方式处理有符号整数。
    在这里插入图片描述

      根据表 2.1可得, 110.00111( 二进制数) = - 1.78125( 十进制数)
      如表 2.2所示 , 一种非常重要的定点数字类型只有一个整数位。
      例如, Motorola StarCore 和 TI C62x DSP 处理器都使用只有一个整数位的定点表示法。 这种格式可能是有问题的, 因为它不能表示+ 1.0,实际上, 任何定点格式都不能表示其负数最小值的相反数。
      所以在使用定点数时要多加注意。 一些 DSP 处理器结构允许利用扩展位对格式进行 1 个整数位的扩展( 这些扩展位就是附加的整数位)。
    在这里插入图片描述

    2.2 定点量化

      重新考虑数字的格式:aaa. bbbb 表示 3 个整数位, 5 个小数位。 可以表示- 4 和3.96785 之间的数, 数之间的步长为 0.03125。 由于具有 8 位, 故具有 28 = 256 个不同的值。 需要注意使用定点时的量化,将有± 1 /2LSB( 最低有效位) 的误差。
      量化就是使用有限数位来表示无限精度的数。 在十进制中, 很熟悉处理给定位数的十进制小数的方法。 实数可以表示为 3.14159265… , 可以量化或将其表述为带 4 个十进制位的小数 3.1416。 如果在这里使用舍人, 则误差为:

    3.14159265…- 3.1416 =- 0.00000735

      如果使用截断法( 即第 4 位小数以后的位数被扔掉) , 则误差将变得更大, 如下:

    3.14159265…- 3.1415 = 0.00009265

      很明显, 舍人是比较合适的能够得到预期精度的方法。 然而该方法也会有一些硬件开销。 尽管开销相对较小, 但它的确不是免费的。
      当乘以小数时需要处理到给定数目的位数。 例如, 如果需要计算两个十进制小数位, 则计算过程如下:

    0.57 X 0.43 = 0.2451

      可被舍人到 0.25,或者截断到 0.24。结果是不同的。
      一旦开始在数字信号处理系统中执行上亿次的乘加运算, 就不难发现这些微小的误差会因为累积而造成严重的影响。

    2.3归一化处理
      使川二进制小数使得算术运算变得容易, 也易于处理字长增长。 作为一个例子, 考这样一个“ 机器”, 它有 4 位十进制数和一个具有 4 个数字位的算术单元, 范围为-9999~+9999。 两个 4 位数相乘将导致多达 8 个有效数字。
    6787 X 4198 = 28491826 -->(标定)2849.1826–>(截断)2849
      如果想把这个数送到该机器的下一级( 算术运算具有 4 位的精度 ) , 那么需要按比例减小 10000 倍, 然后截断 。
      将其归一化到范围-0.9999 ~+0.9999。

    0.6787 X 0.4198 = 0.28491826 —>(截断) 0.2849

      现在截断到 4 位的操作变得相当容易。 当然两种结果是严格一致的, 而差别仅仅在于如何执行截断和标定。
      然而对输入执行归一化操作, 所有的输人值都位于-1~ + 1 的区间内。 可以注意到该区间内任意两个数的乘积同样存在于-1 +1 的区间之内。
      同样的归一化操作也适用于二进制, 而且大多数数字信号处理系统也使用二进制点。
      下面考虑 二 进 制 补 码 中 的 8 位 数 值。 因 此 该 数 值 的 取 值 范 围 是 10 0 0 0 0 0 0~01111111 (-128~+127)。
       如果将这些数归一化到-1~ 1 之间( 除以 128 ), 那么二进制的范围是 1.0000000~0.1111111( -1~ 0.9921875,其中 127/128= 0.9921875 )。 所以把十进制乘法中归一化的概念用于二进制。
      十进制乘法 36 X 97=3492 等价于二进制乘法 0010 0100 X 0110 0001 = 0000 1101 1010010。 在二进制中,将值归一化就是计算 0.0100100 X 0.1100001 =0.00110110100100。 等价于十进制中:

    0.28125 X 0.7578125=0.213134765625

      注意: 在 数 字 信 号 处 理 系 统 中, 在 设 计 者 的 眼 中, 二 进 制 点 是 存 在 的, 然 而 却 没 有 实际 的 连 接 或 连 线。 这 只 是 使 得 跟 踪 字 长 增 长, 以 及 通 过 扔 掉 小 数 位 来 截 断 变 得 更 加 容易。 当 然 如 果 更 愿 意 使 用 整 数 并 且 跟 踪 定 标 等 , 也 可 以 这 样 做。 得 到 的 答 案 是 相 同 的 ,硬 件 开 销 也 是 相 同 的。

    2.4 小数部分截断

      二进制中, 截断是简单地将位去除的过程。 通常使用这种强制的方法来将大的二进制字长变小, 通常需要截掉最低有效位 (LSB),该操作的影响是降低了准确度。
      考虑将十进制数 7.8 9 9 2 截 断 到 3 个 有 效 位 7.89。 当然, 可以截断最低有效位 , 其结果是损失了精度( 分辨率) , 但它仍是最初 5 位数的代表。 如果截断最高有效位 992 ( 或0.0992), 其结果将不是所希望的, 而且也失去了意义。
      在二进制中, 最髙有效位截断的概念是很少使用的, 在十进制的例子中, 最高有效位截断通常是灾难性的。 然而, 在某些极少情况下, 一系列的操作将导致整个数值的范围减小。 所以移除 MSB 也是有好处的。
      截断 MSB 通常发生在要截断的位为空的时候。 当使用有符号的值时, 由于丟失了符号位, 截断 MSB 将会带来问题。
      舍入是一种更准确的方法, 但同时也是更复杂的技术。 该技术需要进行一个加法操作, 然后再直接截断,该过程等价于十进制的四舍五人, 即通过在 7 . 8 9 上 加 0 . 0 5 然 后 再 截 断 到 7.9 来 舍人到一个小数位。 因此简单的舍人需要一个加法操作。

    2.5 一种不同的方法 Trounding

      Trounding 是截断 truncation )和 舍 人( rounding )之 间 的 一 种 折中方 法, 其 特 点如下。
      ① 和舍人一样, Trcnmding 保留了 LSB 以上的信息。
      ② 它和舍人不同, 它不影响新的 LSB 以上的任何位。
      其具体实现方法在 XtremDSP 中进行了详细的介绍, 具体可以参看这部分相关内容。 Trounding 的好处是它不需要全加器, 而且可以通过或门得到比截断更好的性能。尽管是一个很小的优点, 但这种成本上的节省以及性能的改善还是有价值的。


    三、 浮点数定义及表示

    3.1 标 准 浮 点 数 表 述

      浮点数可以在更大的动态范围内提供更高的分辨率, 通常当定点数由于受其精度和动态范围所限不能胜任时, 浮点数能提供解决方案。 当然, 也在速度和复杂度方面带来了损失 , 大多数的浮点数都遵循单精度或双精度的 IEEE 浮点标准。 标准浮点数字长由一个符号位 S,指数 e 和无符号( 小数) 的规格化尾数m构成, 其格式如下:

    在这里插入图片描述
      浮点数可以用下式描述:
    在这里插入图片描述
      指数 e=1…2 是为∞准备的。 而 e=0 是 为 0 预 备 的。 表 2.3 给 出 了 IEEE 的单精度和双精度格式的参数。
    在这里插入图片描述

      在浮点乘法中, 尾数部分可以像定点数一样相乘, 而把指数部分相加。 浮点数减法复杂一些,因为首先将尾数归一化, 就是将两个数都调整到较大的指数, 然后将两个尾数相加。 对于加法和乘法混合运算来说, 最终的归一化, 就是将结果尾数再统一乘小数1.m 形式的表达式, 这是非常必要的。
      一些浮点编码的范例 ( 单精度浮点 32 位, 注意这些运算都是基于二进制的计算)。如下:

    在这里插入图片描述

      注意小数点之前的 1 没有被编码( 那里一直有个 1, 因而不需要显式表示)。

    3.2 浮点数的短指数表示

      简化浮点硬件的一种方法是创建一种使用短指数的数据格式。 这种情况下有一个 4位的指数和一个 11 位的尾数。 因此可以表示-7~ 8 的范围内的指数。 其结果在动态范围内显著地增加, 代价只是精度轻微降低。 表 2.4 给出了定点数和短指数的比较。

    在这里插入图片描述

    3.3 浮点数的应用

      浮点在许多具有专用浮点单元( FPU ) 的 DSP 处理器中被广泛使用。 不在 FPGA中使用浮点的原因如下。
      ① 运算速度慢: FPU 是一个复杂的单元, 设计中的每个代数运算将共用该单元。
      ② 低效的芯片面积: 使用 FPGA 实现 FPU 需要很大的硬件空间。
      然而, 某些情况下 FPU 也许是必不可少的, 例如在需要一个巨大的动态范围的应用场合, 使用浮点可能使得设计更加简单 , 这是因为在定点设计中, 需要最好地利用可用的动态范围, 但是在浮点设计中, 动态范围的限制不是一个需要考虑的问题。

    OVER





    展开全文
  • 数字图像简介及表示

    千次阅读 2019-11-19 17:57:35
    图像是三维世界在二维平面的表示,具体来说就是用光学器件对个物体,个人或是个场景等的可视化表示。 图像的分类 1、从获取方式上: 拍摄类图像、绘制类图像 2、从颜色上: 彩色图像、灰度图像、黑白...
    数字图像处理
    数字图像处理(Digital Image Processing)又称为计算机图像处理,是一种将图像信号数字化后利用计算进行处理的过程。
    
    图像
    图像是三维世界在二维平面的表示,具体来说就是用光学器件对一个物体,一个人或是一个场景等的可视化表示。
    
    图像的分类
    1、从获取方式上:
    
    	拍摄类图像、绘制类图像
    	
    2、从颜色上:
    
    	彩色图像、灰度图像、黑白图像
    	
    3、从图像的内容上:
    
    	人物图像、风景图像
    	
    4、从功能上:
    
    	流程图、结构图、心电图、电路图、设计图
    
    在数字图像处理领域,将图像分为模拟图像和数字图像两种,计算机处理的信号都是数字信号,所以在计算机上处理的图像均为数字图像。根据数字图像在计算机中的表示方法不同,分为二进制图像,索引图像,灰度图像,RGB图像和多帧图像;根据计算机中图像文件格式不同,图像又分为位图和矢量图。
    数字图像的产生渠道:

    1、通过像数码照相机这样的设备直接拍摄得到的数字图像
    2、通过图像采集卡、扫描仪等数字化设备,将模拟图像转变为数字图像
    模拟图像转化为数字图像
    0表示黑色,1表示白色,1-7表示格子中白色和黑色的多少,一个格子相当于一像素

    数字图像处理的研究内容主要有以下方向:

    1、图像运算与变换
    2、图像增强:灰度变换、直方图修正、图像平滑、图像锐化等
    3、图像复原:滤波
    4、图像的锐化处理及边缘检测:空间域处理、频域处理(边缘检测算子法提取边缘)
    5、图像分割:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法、基于特定理论的分割方法等
    6、图像编码压缩:在不影响图像质量的前提下,减少图像的数量,以便节省图像传输和处理的时间,及存储容量
    无损压缩(可复原)、有损压缩
    图像运算
    在每个像素上加一个常数,得到右侧图片

    图像的表示方法:

    对图像处理算法描述和利用计算机处理图像的基础。
    5种图像的表示方法:二进制图像、索引图像、灰度图像、RGB图像和多帧图像。

    1、二进制图像

    二进制图像也称为二值图像,通常用一个二维数组来描述,1位表示一个像素,组成图像的像素值非0即1,没有中间值,通常0表示黑色,1表示白色。一般用来描述文字或者图形,优点是占用空间少,缺点是当表示人物或风景图像时只能描述轮廓。

    2、灰度图像

    灰度图像也称为单色图像,通常也由一个二维数组表示一幅图像,8位表示一个像素,0表示黑色,255表示白色,1-254表示不同深浅灰色。
    灰度图像

    3、RGB图像

    RGB图像也称为真彩色,是一种彩色图像的表示方法,利用3个大小相同的二维数组表示一个像素,3个数组分别代表R、G、B三个分量,R表示红色,G表示绿色,B表示蓝色,通过三种基本颜色可以合成任意颜色。每个像素中的每种颜色分量占8位,每一位由[0,255]中的任意数值表示,那么一个像素由24位表示,允许的最大值位2^24(即1677216,通常记为16M)。

    4、索引图像

    索引图像是一种把像素值直接作为RGB调色板下标的图像。在MATLAB中,索引图像包含一个数据矩阵X和一个颜色映射(调色板)矩阵map。数据矩阵可以是8位无符号整型、16位无符号整型或双精度类型的。
    索引图像

    5、多帧图像

    多帧图像是一种包含多幅图像或帧的图像文件,又称为多页图像或图像序列,主要用于需要对时间或场景上相关图像集合进行操作的场合。
    多帧图像

    展开全文
  • chmod用数字表示权限的方法

    千次阅读 2019-03-22 15:56:21
    前提: mode权限设定字串,格式:[ugoa…][[±=][rwxX]…][,…] 其中u表示拥有者(user),g表示与拥有者属于同个群体(group),o表示其他以外的人(other),a表 示这三...其中a,b,c各为数字,a表示User,b...
  • 数字、基数及表示

    千次阅读 2017-01-01 10:01:47
    数字、基数及表示 整数 整数是这些熟悉的数字 …, -1, 0, +1, +2, …。整数值也被称作是‘完整的’,并且分为正数(1到无穷大),负数(-1到负无穷大),零(0),非负数(零或正数)和少有的非正数(零或负数)。...
  • 计算机数字表示

    千次阅读 2019-09-17 16:15:28
    我们知道计算机底层都是使用二进制来操作的,但是生活中我们更习惯使用十...1.我们生活中常用的数字如何在计算机中使用二进制表示 2.这些数如何在计算机中做数字运算。 、常用进制 对于习惯使用十个手指头的人类...
  • 数字系统的信息表示

    千次阅读 2020-12-13 00:39:42
    数字系统与信息1、信息表示a)幅值b)同步波形与异步波形 1、信息表示 ...把曲线与横线的交点找出来,这样,条连续的曲线就用不连续的折线来近似表示,位于横线上方的用数字1表示,下方用数字0表示
  • 正则表达式表示数字范围

    千次阅读 2019-06-20 12:15:09
    \b\d{x,y}\b\d /* x,y为自定义的范围*/
  • 有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算...
  • 展开全部这是大地坐标系的定位,...例如X=383576.912,表示该点在离全球共同的基准点纬线方向距离383576米又912毫米的线上。平面上一点的位置可以用互相垂直的两条线的交点来确定,所以还应该有个Y值。扩展资料:...
  • 我们所处的世界充满了各种各样的字符,我们使用他们,用自己定义的方式来表示,交流。那么计算机内部是怎么样表示这些字符的呢?这个时候不用想,你满脑子都是电脑屏幕上的0 1 0 1对吧。是的,没错,由于硬件的原因...
  • 数字图像的表示与类型(学习篇)

    千次阅读 2018-11-19 16:44:44
    数字图像的表示 幅图像可以被定义为个二维函数f(x,y),其中(x,y)是空间(平面)坐标,在任何坐标(x,y)处的幅度f被定义为图像在这位置的亮度。 图像在x和y坐标以及在幅度变化上是连续的。要将这样的幅...
  • Linux 使用数字表示权限

    千次阅读 2021-02-07 01:20:12
    还有另外种方法是以数字表示权限,r: 对应数值4w: 对应数值2x:对应数值1-:对应数值0我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:111 101 100再将其每三位转换...
  • 、阿拉伯数字转汉字 分析发现,中国的数字习惯是 4 位一节的,个 4 位的数字可被转成几千几百几十几,至于后面添加什么单位则不确定: 如果这节 4 位数字出现在 1~4 位,则后面添加单位“元”; 如果这节 4 位...
  • 扩展数字的位表示和截断数字

    千次阅读 2016-08-27 11:07:18
    一、扩展一个数字的位表示一种常见的运算是在不同字长的整数之间转换,例如,从一个较小的数据类型转换到一个较大的数据类型。将一个无符号数转换为一个更大的数据类型,只需要简单地在表示的开头添加 0,这种运算...
  • 在Python中解释数字范围

    千次阅读 2020-12-05 18:07:19
    使用来自here的parseIntSet我还喜欢最后注释中的pyparsing实现。在parseIntSet在这里被修改为可以处理“&lt;3”类型的条目,并且只在有无效字符串的情况下输出这些无效字符串。在#! /usr/local/bin/python...
  • 华为机试HJ96:表示数字

    万次阅读 多人点赞 2021-10-14 15:47:39
    C++实现——表示数字
  • 声音的数字表示

    千次阅读 2017-10-25 00:06:44
    声音信号的数字化就是用二进制数表示声音的模拟信号。声音的信息表示过程是这样的:声音-->采样-->量化-->编码-->数字音频。 所谓采样,就是在某些特定的时刻对模拟声音信号进行测量,得到离散时间信号。其原理...
  • linux文件权限的修改与数字表示

    千次阅读 2020-03-11 23:32:47
    chmod g-r 文件名 设置其他用户写权限:chmod o=w 文件名 增加所以用户读取权限:chmod a+r 文件名 数字表示法修改权限:chmod 123 用户名 (1对u 2对g 3对o) 数字表示法: r-- --- ---,是用8进制转换二进制表示 ...
  • JS中可以表示数字的最大值

    千次阅读 2020-10-12 02:39:32
    JS中可以表示数字的最大值 Number.MAX_VALUE console.log(Number.MAX_VALUE); 值是 1.7976931348623157e+308 相当于个常量来保存着这个值。 console.log(Number.MAX_VALUE * Number.MAX_VALUE); 返回结果:...
  • Python输入表示星期的数字(1表示星期,2表示星期二......6表示星期六,7表示星期日),输出对应的星期英文单词 小白的解答: 方法: dct={1:'Monday',2:'Tuesday',3:'Wednesday',4:'Thursday',5:'...
  • 给定个仅包含数字2-9的字符串,返回所有它能表示的字母组合。 题目要求: 给定个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下: (与电话按键相同)。注意 1 不对应任何...
  • JS的基础类型Number,遵循IEEE ...1位用来表示符号位 11位用来表示指数 52位表示尾数 浮点数,比如 1 2 0.1 &gt;&gt; 0.0001 1001 1001 1001…(1001无限循环) 0.2 &gt;...
  • 正则表达式中,表示匹配非数字字符的字符

    万次阅读 多人点赞 2019-01-15 16:34:25
    大写表示“非”,d表示digit数字。非数字就是\D, w表示word,非单词就是\W  元字符 描述 \ 将下个字符标记符、或个向后引用、或个八进制转义符。例如,“\\n”匹配\n。...
  • python3 中小数字以百分比形式表示

    千次阅读 2019-01-10 11:34:37
    { } 的意思是对应format()的个参数,按默认顺序对应,参数序号从0开始,{0}对应format()的第个参数,{1}对应第二个参数。例如: 默认顺序: >>> print('percent1: {:.2%}, percent2: {:.1%}'.format(42/50, ...
  • 输入用字符串表示两个字典,输出合并后的字典,字典的键用个字母或数字表示。注意:1和‘1’是不同的关键字! 在行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也...
  • 二进制数字表示方法

    千次阅读 2016-09-27 14:46:44
    二进制数字,写在纸上,一般都写成 0 和 1。 这也不是绝对的。 以各种符号,刻在物体上,也是可以的。 见下图: 这是小米电视后边的散热孔,一共九个汉字 “小米电视为发烧而生”。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,154,191
精华内容 861,676
关键字:

他表示一数字