【问题标题】:How do I convert a floating point number to negaquaternary base (base -4?)如何将浮点数转换为负四进制基数(基数 -4?)
【发布时间】:2019-05-18 23:46:39
【问题描述】:

我正在尝试将数字转换为负四进制基数(作为生成复数的四虚基数的一个步骤)。但我似乎无法理解如何处理小数。 我该如何实施? (使用 java/javascrtip/C#/C/C++/python/ruby 或任何其他类似的编程语言)? https://en.wikipedia.org/wiki/Negative_base#To_any_negative_base 有整数的代码示例,我大多理解这一点,但我无法让它适用于小数:(

谁能帮忙?

【问题讨论】:

  • 把一个数看作是基数乘以相应系数(数字)的总和。小数部分对应于碱基的负幂的总和。模算术仍然可以使用,但您可能需要显式编码操作,而不是使用 %(或在 C 中使用 fmod)。

标签: math base complex-numbers


【解决方案1】:

由于你没有展示你自己的代码,我只展示一个没有代码的算法。

我的基本想法是将给定的数字乘以底的幂,使我们感兴趣的数字在点的左侧。然后我们将数字四舍五入到最接近的整数。然后使用您已经拥有的代码将负四元或类似表示形式作为字符串。最后,将点插入弦中的适当位置,这实际上是分配了底座的力量。如果需要,将最后一位四舍五入。

第一步是乘以底数的偶数次幂。负基表示意味着,如果我们将基数为-4 的负四进制数乘以(-4)^2,即16,则其负四进制表示将具有与原始数字相同的数字。唯一的区别是该点已移动了两个空格。因此,如果您希望您的答案具有prec 的位数,则将prec 舍入到偶数(如果prec 是偶数,则prec+1 如果是奇数)。然后将给定的数字乘以(-4)^roundedprec。如果prec 是奇数,您可能需要截断或舍入最后一位数字以获得所需的位数。

【讨论】:

    【解决方案2】:

    通过更多的谷歌搜索,我设法在 python 中找到了这段代码!

    https://math.stackexchange.com/a/2120385/514618

    该讨论中的 Python 代码是

    from math import floor
    def to_nb(num, base, prec=-15):
        "converts a real from base 10 to negative base (base < -1)"
    
        digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        newval = ""
    
        if base >= -1 or base < -len(digits):
            raise ValueError('invalid base')
    
        P = 0; base = abs(base)  # ref. defines method for -base where base > 0
        lb, rb, X = -base / (base+1.), 1 / (base+1.), num
    
        while not lb <= X < rb:
            P += 1
            X = num / (-base) ** P
    
        def T(x): return -base * x - floor( -base * x - lb)
    
        while P >= prec:  # conversion step
            d = int(floor(-base*X - lb))
            X = T(X)
            if P == 0 and '.' not in newval:  # add radix point
                newval = newval + '.'
            if d == base:  # if this happens, you do this (see Ito ref.)
                newval = newval + digits[d-1]+ digits[0]
            else:
                newval = newval + digits[d]
            P -= 1
        return newval
    

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2022-01-06
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多