精华内容
下载资源
问答
  • 与上一篇进制浮点数-半精度二进制浮点数转换相对应,这里为了进行验证,又写了一个半精度二进制浮点数-进制浮点数转换的MATLAB代码,其实就是个逆过程,上一篇的链接在 ... 目前没有发现问题,数据转换是肯定存在...

    与上一篇十进制浮点数-半精度二进制浮点数转换相对应,这里为了进行验证,又写了一个半精度二进制浮点数-十进制浮点数转换的MATLAB代码,其实就是个逆过程,上一篇的链接在

    https://blog.csdn.net/qq_34365687/article/details/106087767

    目前没有发现问题,数据转换是肯定存在误差的,代码如下

    function [dec_num] = half_float2dec(half_float_num)
        Decimal = 0;
        if(half_float_num(1)=='1')
            sign = 1;
        else
            sign = 0;
        end
        Decimal_bin = half_float_num(7:16);
        for i = 1:length(Decimal_bin)
            if(Decimal_bin(i) == '1')
                Decimal = 2^(-i) + Decimal
            end
        end
        dec_num = (-1)^sign*(1 + Decimal)*2^(bin2dec(half_float_num(2:6)) - 15);
    end
    
    展开全文
  • 易语言十进制浮点数转换二进制源码,十进制浮点数转换二进制,浮点数转二进制,进制转换
  • 半精度二进制浮点数的大批量转换,发现没有现成的转换代码,就根据原理用matlab撸了一个,与在线转换器对比暂时没有发现bug,通过写blog的方式debug(小黄鸭调试法),也欢迎大家帮我找茬,一起debug. 半精度浮点数...

    最近设计用到了十进制浮点数->半精度二进制浮点数的大批量转换,发现没有现成的转换代码,就根据原理用matlab撸了一个,与在线转换器对比暂时没有发现bug,通过写blog的方式debug(小黄鸭调试法),也欢迎大家帮我找茬,一起debug.
    半精度浮点数数据格式16bit,遵循IEEE754的标准,1bit符号位,5bit阶码,10bit尾数。
    关于浮点数的计算可以看下面这个blog,写的很详细:

    https://blog.csdn.net/fwb330198372/article/details/70238982

    IEEE754 在线计算器链接,可以benchmark:

    http://weitz.de/ieee/

    下面是matlab函数:

    function [half_float_num] = dec2half_float(input_num)
    %UNTITLED2 此处显示有关此函数的摘要
    %   此处显示详细说明
    	integer = abs(fix(input_num));
    	Decimal = abs(input_num) - integer;
    	if(input_num >=0)
    	    sign = '0';
    	else
    	    sign = '1';
    	end
    	integer_bin = dec2bin(integer);
    	Decimal_bin = dec2bin(0,24);
    	
    	d(1) = Decimal;
    	for i = 1:24
    	    if(d(i)*2 >= 1)
    	        d(i+1) = d(i)*2 - 1;
    	        Decimal_bin(i) = '1';
    	    else
    	        d(i+1) = d(i)*2;
    	        Decimal_bin(i) = '0';
    	    end
    	
    	end
    	
    	input_num2_bin = strcat(integer_bin,Decimal_bin);
    	if(abs(input_num)>=0.000061035)   %code ! = 00000
    	    for i = 1:length(input_num2_bin)
    	        if(input_num2_bin(i)=='1')
    	            pos = i;
    	            break;
    	        end
    	    end
    	    code = 15 + (length(integer_bin) - pos);
    	    code_bin = dec2bin(code,5); 
    	else
    	    code_bin = dec2bin(0,5);
    	end
    	if(abs(input_num)>=1)
    	    mantissa = input_num2_bin(2:11);
    	elseif(abs(input_num)<=0.000061035)
    	    mantissa = input_num2_bin(16:25);
    	else
    	    mantissa = input_num2_bin(16 - code + 1:25-code + 1);
    	end
    	half_float_num = strcat(sign,code_bin,mantissa);
    end
    
    

    附python版本:

    def dec2half (input_num):
        sign = '0'
        if(input_num<0):
            sign = '1'
        else:
            sign = '0'
            
        integer = abs(int(input_num))
        Decimal = abs(input_num) - integer
        decimal = np.zeros(25)
        decimal[0] = Decimal
        integer_bin = bin(integer)[2:]
        Decimal_bin = ''
        
        for i in range(0,24):
            if(decimal[i]*2 >= 1):
                decimal[i+1] = decimal[i]*2 - 1
                Decimal_bin = Decimal_bin + '1'
            else:
                decimal[i+1] = decimal[i]*2
                Decimal_bin = Decimal_bin + '0'       
                   
        input_num2_bin = integer_bin + Decimal_bin   
        if(abs(input_num)>=0.000061035):   
            for i in range (0 , len(input_num2_bin)):
                if(input_num2_bin[i]=='1'):
                    pos = i
                    break    
            code = 15 + (len(integer_bin) - pos) - 1
            code_bin = bin(code)[2:]
            while(len(code_bin)<5):
                code_bin = '0' + code_bin
        else:
            code_bin = '00000'    
            
        if(abs(input_num)>=1):
            mantissa = input_num2_bin[1:11]
        elif(abs(input_num)<=0.000061035):
            mantissa = input_num2_bin[15:25]
        else:
            mantissa = input_num2_bin[16 - code :25-code + 1]  
            
        half_float_num = sign + code_bin + mantissa
        return(half_float_num)
    
    展开全文
  • 二进制浮点数进制浮点数的转换IEEE给出了一套浮点数值的标准,即IEEE 754。该标准给出了单精度(32位)和双精度(64位)浮点数值的表示方法以及如何对其进行操作。本文简单的给出了从二进制的浮点数到进制浮点数的...

     

    二进制浮点数向十进制浮点数的转换

    IEEE给出了一套浮点数值的标准,即IEEE 754。该标准给出了单精度(32)和双精度(64)浮点数值的表示方法以及如何对其进行操作。本文简单的给出了从二进制的浮点数到十进制浮点数的转换算法。

    根据IEEE 754,浮点数的二进制存储格式被分为三个部分:符号位,指数位和数据位。单精度和双精度浮点数的区别除了总位数长度的区别之外就是基于该长度对其三个部分(符号位,指数位和数据位)的划分。

    l       单精度

    单精度浮点数由32位组成,从左到右,第一位是符号位,后续的8位是指数位,最后23位是数据位,如下:

    S EEEEEEEE  FFFFFFFFFFFFFFFFFFFFFFFF

    1     8                  23                

    对应表示的数值V可以解释为:

    if (E =255 and F != 0) then V = NaN(“Not a Number”);

    if (E =255 and F =0 and S = 1) then V = -Infinity;

    if (E =255 and F =0 and S = 0) then V = Infinity;

    if (255>E>0 ) then V = (-1)**S*2**(E-127)*(1.F)

    if (E = 0 and F != 0) then V = (-1)**S*2**(-126)*(0.F)

    if (E = 0 and F = 0 and S = 1) V = -0;

    if(E = 0 and F = 0 and S = 0) V = 0;

    例如:

      0 00000000 00000000000000000000000 = 0

      1 00000000 00000000000000000000000 = -0

     

      0 11111111 00000000000000000000000 = Infinity

      1 11111111 00000000000000000000000 = -Infinity

     

      0 11111111 00000100000000000000000 = NaN

      1 11111111 00100010001001010101010 = NaN

     

      0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2

      0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5

      1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

     

      0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)

      0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)

      0 00000000 00000000000000000000001 = +1 * 2**(-126) *

                                           0.00000000000000000000001 =

                                           2**(-149)  (Smallest positive value)

    l       双精度

    双精度的浮点数长度是64位,其中一位是符号位,11位是指数位,以及52位的分数位。格式如下:

    S EEEEEEEEEEE  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    1       11                                52                                     

    双精度浮点数对应的十进制数V可以根据下面的算法计算。

    If (E=2047 and F !=0) then V=NaN ("Not a number")

    If (E=2047 and F =0 and S = 1) then V=-Infinity

    If (E=2047 and F = 0 and S = 0) then V=Infinity

    If (0<E<2047) then V=(-1)**S * 2 ** (E-1023) * (1.F)

    If(E=0 and F != 0) then V=(-1)**S * 2 ** (-1022) * (0.F)

    If (E=0 and F = 0 and S = 1) then V=-0

    If (E=0 and F =0 and S = 0) then V=0

     

    注:在算法中的SEF分别表示相应格式中的如下数据

    S = S的数值

    E = EEE….E表示的整数

    F = (F/2)+(F/4)+(F/8)+…..表示的小数

    例如

           1 10101010 11110100000000000000000

           S = 1;

           E = 128+32+8+2 = 170

           F = 1/2 + 1/4 + 1/8 + 1/16 + 1/64

    l       引用

    1.         ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic

     

    展开全文
  • 易语言十进制浮点数转换二进制源码.rar
  • 将32bits二进制浮点数据转换十进制浮点数据。资源包含Matlab仿真程序,和说明文档。
  • 易语言源码易语言十进制浮点数转换二进制源码.rar
  • 文章目录#十进制转换二进制数1、十进制整数转换二进制整数2、十进制小数转换二进制小数#浮点类型数据的存储#参考 #十进制转换二进制数   十进制转换二进制数时,由于整数和小数的转换方法不同,...


    #十进制数转换为二进制数

      十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

    1、十进制整数转换为二进制整数

      十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
    【例1 】 把 十进制173 转换为二进制数。
    在这里插入图片描述

    2、十进制小数转换为二进制小数

      十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
      然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
    【例2】把十进制小数 0.8125转换为二进制小数。
    在这里插入图片描述
    【例3】将十进制数173.8125转为二进制数。

    把整数部分和小数部分合并得:
    (173.8125)10 =(10101101.1101)2

    #浮点类型数据的存储

    无论是单精度还是双精度在存储中都分为三个部分:

    符号位(Sign) : 0代表正,1代表为负
    指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
    尾数部分(Mantissa):尾数部分
    其中单精度float类型数据的存储方式如下图所示:
    在这里插入图片描述
    而双精度double的存储方式为:

    在这里插入图片描述
      比如8.25用十进制的科学计数法表示为:8.2510º,而120.5可以表示为:1.20510²。而计算机根本不认识十进制的数据,他只认识0,1。所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示。8.25用二进制表示可表示为1000.01。120.5用二进制表示为:1111000.1。
      用二进制的科学计数法表示1000. 01可表示为1. 00001×2^3, 而1110110. 1则可表示为1. 1101101×2^6, 任何一个数的科学计数法都可表示为1. xxx×2^n;因此尾数部分就可表示为xxx,反正第一位都是1嘛,干嘛还要表示呀! ?故可将小数点前面的1省略,故23bit的尾数部分,可以表达的精度却变成了24bit,道理就是在这里;那24bit能精确到小数点后的几位呢?我们知道,9的二进制
    表示为1001,所以4bit能精确十进制中的1位小数点,24bit 就能使float能精确到小数点后6位;另算上可以估读最后一位,故有效位数为7位。
      而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为-127至128了,所以指数部分的存储采用移位存储,存储的数据为原数据加127,下面就看看8.25和120.5在内存中真正的存储方式。
      首先看下8.25,用二进制的科学计数法表示为: 1. 00001×2^3。按照上面的存储方式,符号位为0,表示为正:指数位为3+127=130 (二进制值10000010);尾数部分为00001,故8.25的存储方式如下图所示:
    在这里插入图片描述

      而单精度浮点数120.5的存储方式如下图所示:

    在这里插入图片描述

    #其他总结

    1、关于浮点数的精度与范围:

    • .浮点数表示的主要目标是: 用尽量短的字长,实现尽可能大的表数范围和尽可能高的表数精度。
    • 尾数的位数越多,有效精度越高;
    • 阶码的位数越多,范围越大。
    • 设计时,如果字长一定,则需要在精度和范围之间作一权衡。

    2、关于浮点数的分布:与整数的均匀分布相比,浮点数有以下特点

    • 越靠近零点处,数的分布越密,能够表示的精度越高,
    • 越远离零点处,数的分布越稀疏,能够表示的范围越大。

    #参考

    浮点数的二级制存储与转换
    浮点数表示方法


    展开全文
  • 十进制浮点数,整数部分转换二进制,采用除2取余法,将余数从低到高排列,即为整数的二进制数; 小数部分转换二进制,采用乘2取整法,将取整数顺序排列,即为小数的二进制数。 小数部分乘2直到小数部分为0...
  • 十进制转换为IEEE 单精度二进制浮点数(C代码) 介绍: IEEE 单精度浮点数分为三个部分 sign(符号位)exponent(8位) fraction(尾数 23位) 总共32位 这里举一个例子:例如将7转成IEEE单精度二进制...
  • IEEE标准的32位浮点数转换十进制的计算方法   下面是用笔记本电脑的MODTEST软件在COM 1口经232转485转换器转变为485口后连接到流量计算机,通过MODBUS协议读取到的流量计内部数据,下面通过分析,解释了如何...
  • } xijei.cpp #include "format.h" #include QString Format::binToDec(QString strBin){ //二进制十进制 QString decimal; int nDec = 0,nLen; int i,j,k; nLen = strBin.length(); for(i=0;i if(strBin[nLen-i-1...
  • 注:该处的浮点数为正数,负数的情况大家可以做简单的修改。 import numpy as np accuracy = 4 # 小数部分精度 def dtb(num): #判断是否为浮点数 if num == int(num): #若为整数 integer = '{:08b}'.format...
  • 如何将十进制浮点数 转换二进制浮点数,分为两部分: 1. 先将整数部分转换二进制, 2. 将小数部分转换二进制, 然后将整数部分与小数部分相加。  以 20.5 转换为例,20转换后变为10100;0.5 要转换二...
  • 求解下面这个数,第三行涂鸦标出来的数字,为什么转成二进制不是我列出来的那个结果,求教!
  • 十进制整数转二进制 输入整数以补码形式显示 例如: input: 10 outout: 1010 正整数的补码为其原码,负数的补码为其模减去该负数的绝对值(模运算) 例如: input: -9 outout: s(1)1110111 //其中s(1)为符号位 ...
  • 首先,IEEE754表示的数由三部分组成,符号位:正数为0,负数为1 阶码位(2~9位):将十进制数表示为1.f*2^(e-127)=n,解得e,e的二进制数即为该数的阶码,尾数位(10-32位):将1.f的小数部分转为2进制所得的二进制数...
  • 二进制浮点数的精度丢失问题二进制浮点数介绍二进制组成部分丢失精度的情况10.3的二进制数:下面我们来看0.6的二进制表示0.3+0.6结果:我们再来看一组数据0.3+0.4还有一种丢失精度的情况 二进制浮点数介绍 二进制...
  • 1.EXCEL 自带的工具/加载宏/分析工具/ 中的确有类似函数可将十进制数轻松转化为二进制。可是该函数的致命缺点是只能装换 -512~511之间的整数,超过此范围的数则无能为力。所以我们只能自己利用vba写个可用的函数。...
  • 喜欢的可以收藏转发加关注使用十进制浮点数,可以避免二进制浮点数与我们习惯的十进制数之间的表示误差.这个在金融领域是非常重要的.但是计算机基本都只能对二进制浮点数进行计算,也就是IEEE754格式表示的浮点数.很多...
  • 十进制浮点数二进制转换及存储

    千次阅读 2016-07-19 15:18:48
    十进制小数的二进制表示: 整数部分:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序 小数部分:乘以2,然后取出整数部分,将剩下的小数部分继续乘以2,然后再取整数部分,一直取到小数部分为零...
  • 最近学习计算机系统概论,经常需要将十进制浮点数转换二进制的形式,加之有相关作业,写个代码与大家分享。逻辑稍有混乱,不过还是很好用的#传入一个浮点型字符串和有效数字位数 def fraction_to_binary...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 678
精华内容 271
关键字:

二进制浮点数转换十进制