Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тип float в IAR C
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Harvester
Впервые использовал float и возник следующий вопрос.
Берем число (от фонаря): -362.0927, в HEX - C3B50BDE
пересылаем эти байты по UART в PC, получаем -362.0927124 (программа на Visual C++).

Это нормально? Вроде бы формат хранения float в обеих компиляторах один и тот же (IEEE), тогда почему отличаются числа?
arttab
В Вашем случае не знаю, формат хранения зависит от компилятора. Посмотрите как нужное Вам числи выглядит в Visual C++.
bav
я ввел C3B50BDE в память в CCS3.0.
переключила на 32bit floating point, получил: -362.0927
переключил на 32bit exponential float, получил: -3.6209271e+02
64bit floating point - получается не очень похожее: 6.953518030444701e-3
посмотрите в опциях компилятора. может дело в формате представления
ek74
Так и должно быть, т.к. по стандарту IEEE 754 тип float имеет следующее представление:
1 бит - знак
8 бит - порядок
23 бита - мантисса

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


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

Если Вы хотите иметь более точное представление, то используйте double:
1 бит - знак
11 бит - порядок
52 бита - мантисса
Harvester
Спасибо!
В общем-то я так и предполагал, но мне казалось, что 23 бит мантиссы достаточно для 4-х знаков после запятой.
ek74
Цитата(Harvester @ Feb 9 2006, 14:58) *
В общем-то я так и предполагал, но мне казалось, что 23 бит мантиссы достаточно для 4-х знаков после запятой.


Поскольку формат IEEE подраземевает следующее представление числа n = (–1)^s * 2^(e–127) * 1.f,
где s - знак, e - порядок, f - мантисса, т.е. число нормализованное, то биты образующие целую часть, тоже "уходят" в мантиссу. Так что реально после запятой получается гораздо больше знаков чем 4.

Отсюда вытекает, что чем больше будет целая часть, тем менее точно будет представленна дробная часть числа sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.