我在Matlab中使用非负矩阵分解将矩阵分解为两个因子。使用这个,我得到了两个双精度浮点矩阵,B和C.
样本结果
B(1,1) = 0.118
C(1,1) = 112.035
我现在正在尝试修改这些值中的特定位,但是对任一值使用bitset函数我都会收到错误,因为bitset需要无符号整数。
我也尝试过使用dec2bin函数,我假设它会将小数转换为二进制,但它会为B(1,1)返回'0'。
有没有人知道在不损失精度的情况下处理浮点数的任何方法?
答案 0 :(得分:6)
您应该查看typecast
和bitset
函数。 (分别是文档here和here)。这可以让你做像
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