Важная информация

User Tag List

Показано с 1 по 5 из 5

Тема: Вещественное четырёхбайтовое число в строку

  1. #1
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,601
    Спасибо Благодарностей отдано 
    2,172
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вещественное четырёхбайтовое число в строку

    Поскольку процедура будет использоваться с SDCC, то интересует работа с местным вещественным типом float. Местный double, впрочем, ему эквивалентен.

    Здесь я уже прошу помощи у вас. Нужно сделать конверсию вещ. числа в строку. Никаких аналогов _ftoa в SDCC, разумеется, нет. sprintf("%f", f) печатает "NO FLOAT", из чего я делаю вывод, что авторами SDCC эта задача не решалась. Может кто-то сталкивался и поделится наработками? Нужно для стандартной библиотеки ZXDev.



    Можно использовать ПЗУ Спектрума (впрочем, я не умею переводить SDCC'шные 4-байтные float числа в пятибайтную форму калькулятора ПЗУ. Если кто-то сталкивался, напишите).

    Спасибо.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не знаю чего там в спектрумовском бейсике, а нормальный float можно вывести примерно так:
    1) выводим знак, а от числа берем модуль.
    2) проверяем является ли оно нулём или бесконечностью и выводим эти значения.
    3) разделяем число на мантиссу и двоичный порядок, для нормализованных чисел в мантиссу нужно добавить единицу, которую там не хранят.
    4) приводим число к диапазону от 0.1 до 1: пока число меньше 0.1 умножаем его на 10, и подсчитываем сколько раз это было проделано, если больше или равно 1, значит умножаем на 0.1, в итоге мы узнаем десятичный порядок.
    5) если двоичный порядок остался не нуль, значит нужно сдвинуть мантиссу вправо.
    6) теперь у нас дробное число в диапазоне от 0.1 до 1, которое в цикле можно умножить на 10, чтобы вывести целую часть как очередную цифру, а дробную часть опять можно умножать, пока не будет выведено требуемое количество цифр.
    7) в зависимости от того, после скольких цифр мы решили поставить точку, корректируем десятичный порядок, пишем буковку E и выводим его с требуемым знаком.

    В 4 пункте вместо циклического умножения на 0.1, можно сравнивать число с 10^32, 10^16, 10^8, 10^4, 10^2, 10, 1 и домножать на обратное, пока число больше, ну и наоборот. Правда 3-4 двоичных разряда на этом можно и потерять, поэтому нужно внимательно следить куда округлены степени 10.

  4. #3
    Master
    Регистрация
    27.01.2005
    Сообщений
    894
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    139 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не эббите мозг. Sdcc имент printf. Он умеет float в строку. Можно выдернуть и отдельно.
    Там при компиляции есть какойто символ, определяющий умеет printf float или нет.
    В sdcc-noinit кстати есть примеры с выводом float какието. Или были. Навскидку не помню.
    Я сейчас в пути и паглядеть не могу.

    - - - Добавлено - - -

    https://github.com/salextpuru/sdcc-n...rintf_float.mk
    Последний раз редактировалось SfS; 17.10.2018 в 07:45.

  5. #4
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не оно-ли? http://zxpress.ru/article.php?id=5539
    Вроде на базе этого можно и в строку

  6. #5
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,601
    Спасибо Благодарностей отдано 
    2,172
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, друзья.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Целое двухбайтовое число в строку
    от Oleg N. Cher в разделе Программирование
    Ответов: 7
    Последнее: 31.03.2019, 09:19
  2. Ответов: 18
    Последнее: 31.07.2016, 13:52
  3. Число проданных копий
    от alone в разделе Игры
    Ответов: 9
    Последнее: 21.03.2013, 22:48
  4. Быстро вывести число 0-255 на экран
    от Aprisobal в разделе Программирование
    Ответов: 7
    Последнее: 26.01.2005, 08:05

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •