Как преобразовать число с плавающей запятой в четвертичное основание (основание -4?)

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

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

Думайте о числе как о сумме степеней основания, умноженных на соответствующие им коэффициенты (цифры). Дробный компонент соответствует сумме по отрицательные силы основания. Арифметика по модулю все еще может использоваться, но вам может потребоваться явно кодировать операции вместо использования % (или использовать fmod в C).

meowgoesthedog 18.12.2018 15:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
63
2

Ответы 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

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

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

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

Другие вопросы по теме