在Matlab中对浮点数进行位修改
我正在 Matlab 中使用非负矩阵分解将矩阵分解为两个因子。使用它,我从 A 得到两个双精度浮点矩阵 B 和 C。
示例结果是
B(1,1) = 0.118
C(1,1) = 112.035
我现在尝试修改这些值中的特定位,但在任一值上使用 bitset 函数时会出现错误,因为 bitset 需要无符号整数。
我还尝试过使用 dec2bin 函数,我认为该函数会将小数转换为二进制,但它为 B(1,1) 返回“0”。
有谁知道有什么方法可以在不损失精度的情况下处理位级别的浮点数吗?
I'm working in Matlab using Non-negative Matrix factorization to decompose a matrix into two factors. Using this I get from A two double precision floating point matrices, B and C.
sample results are
B(1,1) = 0.118
C(1,1) = 112.035
I am now trying to modify specific bits within these values but using the bitset function on either values I get an error because bitset requires unsigned integers.
I have also tried using dec2bin function, which I assumed would convert decimals to binary but it returns '0' for B(1,1).
Does anyone know of any way to deal with floats at bit level without losing precision?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该查看
typecast
和bitset
函数。 (文档此处和此处分别)。这可以让你做类似的事情You should look into the
typecast
andbitset
functions. (Doc here and here respectively). That lets you do stuff likenum2hex 和 hex2num 函数是您的朋友。 (虽然不一定是很好的朋友;十六进制字符串并不是处理二进制浮点数的最佳想象形式。您可以将它们拆分为 8-nybble 块,然后将每个块转换为整数。)
来自 MATLAB 文档:
退货
和
退货
The num2hex and hex2num functions are your friends. (Though not necessarily very good friends; hexadecimal strings aren't the best imaginable form for working on binary floating-point numbers. You could split them into, say, 8-nybble chunks and convert each to an integer.)
From the MATLAB docs:
returns
and
returns