IEEE754标准

时间:2022-06-10 19:58:07

以下计算按规格化规定:

S:符号位

M:分数值

E:指数偏移值

单精度浮点数(32bit):

NUM_single = (-1)^S *  1.M   *   2^(E-127)

双精度浮点数(64bit):

NUM_double = (-1)^S *  1.M   *   2^(E-1023)

十六进制单精度浮点数 与 十进制浮点数 互转:

MATLAB:
a = '45438971' % IEEE754 格式十六进制浮点数
b = typecast(uint32(hex2dec(a)),'single') % 十进制单精度浮点数 sprintf('```%tx',single(b)) % IEEE754 格式十六进制浮点数

十六进制单精度浮点数转十进制浮点数:

  1. 方式一
a = textread('4.txt','%s');      % 读取字符
n = length(a(:)); % 计算数组长度
b = hex2single(a)
t = linspace(0,1000,n);
plot(t,b, "*"); function number_transform = hex2single(hexString)
binString = dec2bin(hex2dec(hexString));
binString = [char(zeros(size(binString, 1),32-length(binString)) + 48) binString];
if binString(1) == '0'
number_transform = (1 + single(bin2dec(binString(:, 10:end)))/2^23).*2.^(bin2dec(binString(:, 2:9)) - 127);
else
number_transform = -(1 + single(bin2dec(binString(:, 10:end)))/2^23).*2.^(bin2dec(binString(:, 2:9)) - 127);
end
end
  1. 方式二
a = '409BFFFF';                                    %# A sample hexadecimal value
b = hex2dec(a); %# Convert to an integer
sign = bitget(b,32); %# Compute the sign
exponent = bitget(b,24:31)*2.^(0:7).'; %# Compute the exponent
fraction = bitget(b,1:23)*2.^(-23:-1).'; %# Compute the fraction
value = (-1)^sign*(1+fraction)*2^(exponent-127); %# Compute the value
fprintf('%1.7f\n',value) %# Display the value

取值范围:

博客园 - IEEE754 32位浮点数表示范围

参考链接:

CSDN - IEEE754标准 单精度(32位)/双精度(64位)浮点数解码

博客园 - 二进制小数及 IEEE 浮点表示

MATLAB论坛 - 浮点数在内存中表示方式的理解

MATLAB论坛 - MATLAB怎么实现浮点数到16进制的转换(float)?

IT屋 - 32位十六进制到32位浮点(IEEE 754)在matlab中的转换