Похоже, вы пытаетесь использовать формат «десятичное кодированное основание-4». То есть, учитывая цифру base-4 (.222300 4 ), вы интерпретируете его как десятичное число (.222300 10 ), а затем сохраняете числовое значение десятичного числа в float
или double
. Затем, поскольку используемая вами реализация C использует двоичный код float
или double
, вы получите двоичное представление, которое, конечно же, приводит к ошибке при преобразовании из значения десятичного числа. Основное решение для этого: Не делайте этого. Нет причин использовать десятичную.
Поскольку у вас есть числа base-4, просто вставьте цифры base-4 в некоторые биты. Выберите целочисленный тип без знака и используйте два его бита для каждой цифры из 4 цифр. В качестве альтернативы, если вы должны использовать число с плавающей запятой, то используйте два ее бита для каждой цифры из 4-х цифр. Чтобы представить .222300 4 в float
или double
, разделить 0 на 4, добавить 0, разделить на 4, добавить 3, разделить на 4, добавить 2, разделить на 4, добавить 2, разделить на 4, прибавьте 2 и разделите на 4. Результат будет точным, и вы можете затем сделать арифметику изначально в float
или double
. Тогда вам просто нужны процедуры преобразования: одна для ввода, который преобразует цифры base-4 в ваш внутренний формат, и одна для вывода, который преобразует ваш внутренний формат в цифры base-4.