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

发布于 2024-10-21 01:16:43 字数 308 浏览 2 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梅倚清风 2024-10-28 01:16:43

您应该查看 typecastbitset 函数。 (文档此处此处分别)。这可以让你做类似的事情

xb = typecast( 1.0, 'uint64' );
xb = bitset( xb, 10, 1 );
typecast( xb, 'double' );

You should look into the typecast and bitset functions. (Doc here and here respectively). That lets you do stuff like

xb = typecast( 1.0, 'uint64' );
xb = bitset( xb, 10, 1 );
typecast( xb, 'double' );
脸赞 2024-10-28 01:16:43

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

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:

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

returns

ans =

3ff0000000000000
0000000000000000
3fb999999999999a
c00921fb54442d18
7ff0000000000000
fff8000000000000

and

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

returns

ans =

3f800000
00000000
3dcccccd
c0490fdb
7f800000
ffc00000
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文