0

如何获得特定基数中任意分数的表示?例如,以 2 为底的 1/3 的表示应该是

[[0], [0, 1, 0, 1, 0, 1, ...]

但是当我输入digits(1/3, 2)GP shell 并按 Enter 时,我看到的只是以下错误:

? digits(1/3, 2)
  ***   at top-level: digits(1/3,2)
  ***                 ^-------------
  *** digits: incorrect type in digits (t_FRAC).

如何解决问题?

4

1 回答 1

1

值 1/3 是 1/3 并且没有底。如果您想以某个基数将其输出到某个精度,您可以乘以基数^精度:

digits(floor(1/3 * 2^50), 2)

编辑:更完整的解决方案:

Vec(digits(floor(frac(1/3) * 2^50), 2), -50)

以上仅涉及小数部分。整数部分可以用 获得(1/3)\1。在这种情况下,小数位数为 50 并且出现两次。这可以打包为一个函数:

fracdigits(f,b,n)=[digits(f\1, b), Vec(digits(floor(frac(f) * b^n), b), -n)]
fracdigits(1/3, 2, 50)
fracdigits(1/8, 2, 50)
于 2020-11-12T18:00:25.637 回答