реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
semma2013
сообщение Mar 26 2013, 06:17
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 26-03-13
Пользователь №: 76 203



Никто не может поделиться исходником на СИ, реализующем перевод дробного десятичного числа в формат с плавающей точкой IEEE 754 ? Очень надо для диплома.
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Mar 26 2013, 07:14
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



А дробное десятичное число у вас в каком формате?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 26 2013, 07:20
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



scanf()

Или поддержу предыдущего оратора - что подразумевалось под "десятичным форматом"


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
semma2013
сообщение Mar 26 2013, 10:54
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 26-03-13
Пользователь №: 76 203



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

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


123.45


Мне нужна не сама функция, а реализация этой функции. Платформа под которую я пишу - очень старая.
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Mar 27 2013, 06:39
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



У вас есть децимальный разделитель. Все, что до него переводите в 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)

Сообщение отредактировал Misile_Inc - Mar 27 2013, 10:06
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 8 2013, 06:39
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(semma2013 @ Mar 26 2013, 14:54) *
Задача такая:
1) Приходит по UART число в кодах ASCII,
2) Надо строку символов (или их кодов) преобразовать в десятичное число формата: 12.34
3) Потом надо это число десятичной системы счисления 12.34 преобразовать в 32-БИТНЫЙ формат IEEE 754.
4) Пишу на СИ под x8051 компилятор DUNFIELD
Если бы в ТЗ отсутствовал пункт 2 то функция atof вам бы пришлась как нельзя кстати.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
semma2013
сообщение Apr 11 2013, 07:20
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 26-03-13
Пользователь №: 76 203



Проблема еще в том, что компилятор Dunfield не поддерживает переменную типа Float.
Go to the top of the page
 
+Quote Post
semma2013
сообщение Apr 11 2013, 11:03
Сообщение #8





Группа: Новичок
Сообщений: 5
Регистрация: 26-03-13
Пользователь №: 76 203



Еще проблема в том, что компилятор Dunfield не поддерживает команду atof(), поэтому мне ее надо написать самостоятельно, поэтому и прошу помочь.
Go to the top of the page
 
+Quote Post
neiver
сообщение Apr 11 2013, 12:48
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



А для чего нужны именно числа с плавающей точкой IEEE 754? К тому-же если они не поддерживаются компилятором. Если просто нужна дробная арифметика с ограниченным диапазоном значений, томожет стоит к числам с фиксированной точкой присмотреться.
Go to the top of the page
 
+Quote Post
semma2013
сообщение Apr 15 2013, 06:41
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 26-03-13
Пользователь №: 76 203



Цитата(neiver @ Apr 11 2013, 16:48) *
А для чего нужны именно числа с плавающей точкой IEEE 754? К тому-же если они не поддерживаются компилятором. Если просто нужна дробная арифметика с ограниченным диапазоном значений, томожет стоит к числам с фиксированной точкой присмотреться.


Можно и с фиксированной точкой (2 знака после запятой), нужен текст исходника на СИ для перевода числа из десятичной системы счисления в формат IEEE 754 (32бит) ... очень нужен.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 15 2013, 07:14
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(semma2013 @ Apr 15 2013, 10:41) *
... очень нужен.
Уже бы за 2 недели и сами написали...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th July 2025 - 02:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016