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

 
 
> Тип float в IAR C
Harvester
сообщение Feb 9 2006, 10:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Впервые использовал float и возник следующий вопрос.
Берем число (от фонаря): -362.0927, в HEX - C3B50BDE
пересылаем эти байты по UART в PC, получаем -362.0927124 (программа на Visual C++).

Это нормально? Вроде бы формат хранения float в обеих компиляторах один и тот же (IEEE), тогда почему отличаются числа?


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arttab
сообщение Feb 9 2006, 10:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



В Вашем случае не знаю, формат хранения зависит от компилятора. Посмотрите как нужное Вам числи выглядит в Visual C++.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
ek74
сообщение Feb 9 2006, 11:38
Сообщение #3


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

Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351



Так и должно быть, т.к. по стандарту IEEE 754 тип float имеет следующее представление:
1 бит - знак
8 бит - порядок
23 бита - мантисса

Для представления точного значения Вашего числа (-362.0927) не хватает разрядности мантиссы. Попробуйте в Visual C++ следующий код:
Код
float f = -362.0927;
printf("%f\n", f);


результат будет: -362.092712

Если Вы хотите иметь более точное представление, то используйте double:
1 бит - знак
11 бит - порядок
52 бита - мантисса
Go to the top of the page
 
+Quote Post



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

 


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


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