在 Mathematica 中获取 [0,1] 实数二进制展开中的位的有效方法?

发布于 2024-11-26 01:56:52 字数 580 浏览 2 评论 0 原文

众所周知,[0,1] 中的任何实数都可以写成以 1/2 为基数的二进制展开式:

x = b1 * 1/2^1 + b2 * 1/2^2 + ...

我想要一种有效的方法来获取给定 x< 的 bi /strong> 和索引 i,我认为 Mathematica 中没有任何内置方法可以做到这一点。 IntegerDigits 和 RealDigits 似乎无法提供帮助,并且没有一个相关函数是相关的。

显而易见的解决方案是进行手动转换,但我希望避免这种情况。我错过了什么吗?

编辑:供将来参考,我正在寻找的东西可以这样完成,

BinaryExpansionBit[p, j] := RealDigits[p, 2, 1, -j][[1]][[1]]

其中

BinaryExpansionBit[x, i]

给出了我正在谈论的bi

As is well known, any real in [0,1] can be written as a binary expansion in base 1/2:

x = b1 * 1/2^1 + b2 * 1/2^2 + ...

I would like an efficient way to get bi for a given x and index i, and I don't think there's any built-in way to do that in Mathematica. IntegerDigits and RealDigits don't seem to be able to help, and none of the related functions are pertinent.

The obvious solution is to do the manual conversion, but I was hoping to avoid that. Am I missing something?

EDIT: for future reference, what I was looking for can be done this way,

BinaryExpansionBit[p, j] := RealDigits[p, 2, 1, -j][[1]][[1]]

where

BinaryExpansionBit[x, i]

gives the bi I was talking about.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

独闯女儿国 2024-12-03 01:56:52

我不明白 RealDigits 有什么问题。

rd=RealDigits[0.1,2]

提供了一个很好的二进制扩展:

(* out: 
    {{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
   0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 
  1, 0, 0, 1, 1, 0, 1, 0}, -3} 
*)

测试:

rd[[1]].Table[1/2^(n - rd[[2]]), {n, Length[rd[[1]]]}]

(* out: 3602879701896397 / 36028797018963968, which is 0.1*)

RealDigit 输出的第二个元素告诉您第一个元素相对于十进制的位置观点。因此,对于真正的 r,0 你的 bi = rd[[1,i-rd[[2]]]

I don't see what's wrong with RealDigits.

rd=RealDigits[0.1,2]

gives a nice binary expansion:

(* out: 
    {{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
   0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 
  1, 0, 0, 1, 1, 0, 1, 0}, -3} 
*)

testing:

rd[[1]].Table[1/2^(n - rd[[2]]), {n, Length[rd[[1]]]}]

(* out: 3602879701896397 / 36028797018963968, which is 0.1*)

The second element of RealDigit's output tells you location of the first element with respect to the decimal point. So, for a real r, 0<r<1 your bi = rd[[1,i-rd[[2]]].

无妨# 2024-12-03 01:56:52

这取决于你所说的“高效”是什么意思。 Mathematica 可以轻松转换为二进制,如 Wolfram Alpha 示例 所示。

否则,您要寻找的是 x * 2^i 整数部分的奇偶校验。

It depends on what you mean by "efficient". Mathematica can easily convert to binary, as this Wolfram Alpha example shows.

Otherwise what you are looking for is the parity of the integer part of x * 2^i.

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