Как мне преобразовать число с плавающей запятой в основание четвертичного числа (основание -4?) - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь преобразовать число в нега-четвертичное основание (в качестве шага в создании кватер-мнимой базы для комплексного числа).Но я не могу обернуться, что делать с десятичными знаками.Как мне это реализовать?(используя java / javascrtip / C # / C / C ++ / python / ruby ​​или любой другой подобный язык программирования)?https://en.wikipedia.org/wiki/Negative_base#To_any_negative_base содержит примеры кода для целого числа, и я в основном понимаю это, но я не могу заставить его работать для десятичных чисел: (

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Поскольку вы не показываете свой собственный код, я просто представлю алгоритм без кода.

Моя основная идея состоит в том, чтобы умножить данное число на степень основания, чтобы получить интересующие нас цифры.слева от точки.Затем мы округляем число до ближайшего целого числа.Затем используйте код, который вам уже нужен, чтобы получить нега-четвертичное или подобное представление в виде строки.Наконец, вставьте точку в нужном месте в строке, которая по сути делит мощность базы.При необходимости округлите последнюю цифру.

Первый шаг - умножить на четную мощность базы.Отрицательно-базовое представление означает, что если мы умножим нега-четвертичное число, имеющее основание -4, на (-4)^2, а именно 16, то его нега-четвертичное представление будет иметь те же цифры, что и исходное число.Разница лишь в том, что точка была перемещена на два пробела.Поэтому, если вы хотите, чтобы в вашем ответе было prec количество цифр, округлите prec до четного числа (само по себе, если prec четное, prec+1, если оно нечетное).Затем умножьте данное число на (-4)^roundedprec.Если prec было нечетным, вы можете усечь или округлить последнюю цифру, чтобы получить желаемое количество цифр.

0 голосов
/ 18 декабря 2018

Немного погуглив, мне удалось найти этот кусок кода на 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
...