Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перевод дробного десятичного числа в формат
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
semma2013
Никто не может поделиться исходником на СИ, реализующем перевод дробного десятичного числа в формат с плавающей точкой IEEE 754 ? Очень надо для диплома.
Misile_Inc
А дробное десятичное число у вас в каком формате?
MrYuran
scanf()

Или поддержу предыдущего оратора - что подразумевалось под "десятичным форматом"
semma2013
Задача такая:
1) Приходит по UART число в кодах ASCII,
2) Надо строку символов (или их кодов) преобразовать в десятичное число формата: 12.34
3) Потом надо это число десятичной системы счисления 12.34 преобразовать в 32-БИТНЫЙ формат IEEE 754.
4) Пишу на СИ под x8051 компилятор DUNFIELD

Цитата(Misile_Inc @ Mar 26 2013, 11:14) *
А дробное десятичное число у вас в каком формате?


123.45


Мне нужна не сама функция, а реализация этой функции. Платформа под которую я пишу - очень старая.
Misile_Inc
У вас есть децимальный разделитель. Все, что до него переводите в int, затем присваиваете переменной типа float tmp_float, то, что после точки/ запятой так же преобразовываете в int и float.
В очень укрупненном варианте может все выглядеть так:
CODE
tmp_int = get_integer();
tmp_float = tmp_int;
tmp_int = get_integer();
tmp_float += (float) tmp_int * 0.1;


Функцию get_integer() тогда нужно реализовать так, чтобы сначала она удаляла из буфера все символы, которые не являются цифрами(не попадающие в границы от '0' до '9'), затем преобразовывала последующие числа в int до децимального разделителя.
Вообще подумайте, нужно ли вам именно то, что вы спросили. Часто оказывается возможной передача данных с заранее оговоренной размерностью, например 0.001, а потом умножаете на какой угодно коэффициент.
Соответственно, обычно с ASCII работать тоже нет нужды, если вы не хотите работать с устройством через консоль (имитатор терминала tty)
demiurg_spb
Цитата(semma2013 @ Mar 26 2013, 14:54) *
Задача такая:
1) Приходит по UART число в кодах ASCII,
2) Надо строку символов (или их кодов) преобразовать в десятичное число формата: 12.34
3) Потом надо это число десятичной системы счисления 12.34 преобразовать в 32-БИТНЫЙ формат IEEE 754.
4) Пишу на СИ под x8051 компилятор DUNFIELD
Если бы в ТЗ отсутствовал пункт 2 то функция atof вам бы пришлась как нельзя кстати.
semma2013
Проблема еще в том, что компилятор Dunfield не поддерживает переменную типа Float.
semma2013
Еще проблема в том, что компилятор Dunfield не поддерживает команду atof(), поэтому мне ее надо написать самостоятельно, поэтому и прошу помочь.
neiver
А для чего нужны именно числа с плавающей точкой IEEE 754? К тому-же если они не поддерживаются компилятором. Если просто нужна дробная арифметика с ограниченным диапазоном значений, томожет стоит к числам с фиксированной точкой присмотреться.
semma2013
Цитата(neiver @ Apr 11 2013, 16:48) *
А для чего нужны именно числа с плавающей точкой IEEE 754? К тому-же если они не поддерживаются компилятором. Если просто нужна дробная арифметика с ограниченным диапазоном значений, томожет стоит к числам с фиксированной точкой присмотреться.


Можно и с фиксированной точкой (2 знака после запятой), нужен текст исходника на СИ для перевода числа из десятичной системы счисления в формат IEEE 754 (32бит) ... очень нужен.
demiurg_spb
Цитата(semma2013 @ Apr 15 2013, 10:41) *
... очень нужен.
Уже бы за 2 недели и сами написали...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.