Как повысить точность значений с плавающей точкой? - PullRequest
0 голосов
/ 06 июня 2019

Я пишу программу, которая работает на основе номера 4. Как я могу сделать значения более точными?

У меня есть число 0,668 в десятичном виде, которое я конвертирую в base-4. Это должно быть 0,222300, но оно хранится как 0,222299, что дает очень неточные результаты, поскольку предполагается, что это число с основанием-4. Я читал об арифметике с плавающей точкой, но не смог найти способ повысить точность чисел на языке c. Я попытался использовать long double, но я не смог найти способ вывести long double значения. Я не знаю, важно ли это, но я использую кодовые блоки с mingw.

Edit: @EricPostpischil ответил на мой вопрос.

1 Ответ

1 голос
/ 06 июня 2019

Похоже, вы пытаетесь использовать формат «десятичное кодированное основание-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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...