在Matlab中对浮点数进行位修改

时间:2011-03-09 12:11:44

标签: matlab binary floating-point bit-manipulation

我在Matlab中使用非负矩阵分解将矩阵分解为两个因子。使用这个,我得到了两个双精度浮点矩阵,B和C.

样本结果

B(1,1) = 0.118
C(1,1) = 112.035

我现在正在尝试修改这些值中的特定位,但是对任一值使用bitset函数我都会收到错误,因为bitset需要无符号整数。

我也尝试过使用dec2bin函数,我假设它会将小数转换为二进制,但它会为B(1,1)返回'0'。

有没有人知道在不损失精度的情况下处理浮点数的任何方法?

2 个答案:

答案 0 :(得分:6)

您应该查看typecastbitset函数。 (分别是文档herehere)。这可以让你做像

这样的事情
xb = typecast( 1.0, 'uint64' );
xb = bitset( xb, 10, 1 );
typecast( xb, 'double' );

答案 1 :(得分:0)

num2hex和hex2num函数是你的朋友。 (虽然不一定是非常好的朋友;十六进制字符串不是处理二进制浮点数的最佳可想象形式。你可以将它们拆分成8-nybble块并将每个转换为整数。)

来自MATLAB文档:

num2hex([1 0 0.1 -pi Inf NaN])

返回

ans =

3ff0000000000000
0000000000000000
3fb999999999999a
c00921fb54442d18
7ff0000000000000
fff8000000000000

num2hex(single([1 0 0.1 -pi Inf NaN]))

返回

ans =

3f800000
00000000
3dcccccd
c0490fdb
7f800000
ffc00000