Binary Mathematica中[0,1]实的二进制展开中求位的有效方法?
众所周知,[0,1]中的任何实数都可以写成以1/2为基数的二进制扩展:Binary Mathematica中[0,1]实的二进制展开中求位的有效方法?,binary,wolfram-mathematica,expansion,Binary,Wolfram Mathematica,Expansion,众所周知,[0,1]中的任何实数都可以写成以1/2为基数的二进制扩展: x = b1 * 1/2^1 + b2 * 1/2^2 + ... 对于给定的x和索引I,我想要一种有效的方法来获取bi,我认为在Mathematica中没有任何内置的方法可以做到这一点。IntegerDigits和RealDigits似乎帮不上忙,而且相关的函数都不相关 显而易见的解决方案是手动转换,但我希望避免这种情况。我错过什么了吗 编辑:为了将来的参考,我要找的东西可以这样做 BinaryExpansionBit[
x = b1 * 1/2^1 + b2 * 1/2^2 + ...
对于给定的x和索引I,我想要一种有效的方法来获取bi,我认为在Mathematica中没有任何内置的方法可以做到这一点。IntegerDigits和RealDigits似乎帮不上忙,而且相关的函数都不相关
显而易见的解决方案是手动转换,但我希望避免这种情况。我错过什么了吗
编辑:为了将来的参考,我要找的东西可以这样做
BinaryExpansionBit[p, j] := RealDigits[p, 2, 1, -j][[1]][[1]]
在哪里
给出了我所说的bi。这取决于你所说的“高效”是什么意思。Mathematica可以很容易地转换为二进制,如图所示
否则,您要查找的是
x*2^i
的整数部分的奇偶校验 这取决于你所说的“高效”是什么意思。Mathematica可以很容易地转换为二进制,如图所示
否则,您要查找的是
x*2^i
的整数部分的奇偶校验 我看不出RealDigits有什么问题
rd=realdights[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我看不出realdights有什么问题
rd=realdights[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谢谢你。我的问题有点傻,不过还是要谢谢你的耐心非常感谢。我的问题有点傻,不过还是要谢谢你的耐心