Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 61

double в STM32F4

05.06.2014, 02:53. Показов 6274. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть вопрос. Как считается операции с типом переменной double со включенным хардверным FPU?
Просто где-то в сети встерчал инфу что мат сопроцессор у STM32F4 не умеет хардверно обрабатывать double, а умеет только ftoot. А double обрабатывает софтверно.
На плате проводиться куча вычеслений на double, и быстрая обработка опреация с плавающей точкой очень кретичны. Возможно имеет смысл перевести их во ftoot?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2014, 02:53
Ответы с готовыми решениями:

Работа с double на STM32F4
Можно ли чайнику задать несколько вопросов: 1)double - 64 bit, ftoot - 32 bit, а не double= ftoot=32 bit? 2)Сильно ли отличается...

[Error] cannot convert 'double (*)(double)' to 'double' for argument '1' to 'double pow(double, double)'
#include <iostream> #include <math.h> using namespace std; int main () { system("cls"); double x,y; system ("echo...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std; double polp(double af,double...

6
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
05.06.2014, 04:09
Именно так. аппаратно обрабатываются только ftoot. Double считаются программно и относительно медленно. Если точности ftoot хватает, то однозначно использовать его. С ftoot(хотя и с double тоже, но в меньшей степени) надо учитывать, что например, 100000.f + 0.01f останется 100000.f. То есть нельзя вычитать и складывать относительно большие и маленькие числа, ибо потеря точности.
0
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 61
05.06.2014, 04:20
Спасибо, надо будет переписать чуток кода.
0
0 / 0 / 0
Регистрация: 21.11.2013
Сообщений: 36
06.06.2014, 17:26
откуда может быть хардварная обработка 64 битов в 32-х битовом процессоре?
если не секрет а зачем вам double ?
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 39
06.06.2014, 17:50
Существует ли библиотека эмуляции double с использованием сопроцессора? Вроде было что то такое в эпоху 386SX.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
07.06.2014, 00:41
Цитата Сообщение от kotf2109
откуда может быть хардварная обработка 64 битов в 32-х битовом процессоре?
Справедливости ради, разрядность основного процессора не связана с разрядностью сопроцессора ftooting-point. Например, в i486 это 32-бит и 80-бит, соответственно. То, что в STM32F4xx обе эти разрядности равны 32-бит, - просто совпадение.
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 222
07.06.2014, 12:12
С ftoot(хотя и с double тоже, но в меньшей степени) надо учитывать, что например, 100000.f + 0.01f останется 100000.f. То есть нельзя вычитать и складывать относительно большие и маленькие числа, ибо потеря точности.
Более опасны ошибки операций сравнения результатов ftoot :(
на кривом русском http://support.microsoft.com/kb/42980/ru
a = 69.82
b = 69.20 + 0.62 (как бы в сумме должно быть 69.82 )
но при сравнении a и b равенства не будет !!!! :(
внутренние HEX представления числа "69.82" в a и b будут различны
http://www.softitistro.ru/ieee754.html
§9. Проблемы компьютерных вычислений, вызванные использованием стандарта IEEE754.

http://habrahabr.ru/post/112953/
Цитата Сообщение от об ошибках одинарной точности тоже
Помните, что не все десятичные числа имеют двоичное представление с плавающей запятой.
Например, число «0,2» будет представлено как «0,200000003» в одинарной точности. Соответственно, «0,2 + 0,2 ? 0,4».
Абсолютная погрешность в отдельном случае может и не высока, но если использовать такую константу в цикле, можем получить накопленную погрешность.
Цитата Сообщение от об ошибках двойной точности тоже
Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10,
например, 0.1 или 0.7,
не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы.
Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....
Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство.
Динный фефект флоатфикции имеет глобальный характер - присутствует как для программ, написанных для ПК, так и для микроконтроллеров и промышленных контроллеров :(
Варианты как обходить плавающие грабли описаны в статьях.
Со своей стороны могу предложить в особо важных случаях производить сравнение текста чисел (результат округления при переводе из HEX в STRING)
и тогда текстовая строка константы "69.82" будет идентична результату операции "69.82".

Аксиома для вычислений с плавающей запятой: От перемены мест слагаемых результат вычислений меняется :(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2014, 12:12
Помогаю со студенческими работами здесь

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include <iostream> #include <cmath> using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n];
Ругается на строчку double wArray = new double;, double w = new double; Не удаётся преобразовать тип double в int ((( using...

[Linker Error] Unresolved external 'approxd(double, int, double *, double *)'
Добрый вечер! Работаю в 6 билдере Мой код находится ниже: #include <vcl.h> #pragma hdrstop #include...

Почему мы пишем double x (double y)? а не через запятую double x,y
почему мы пишем double x (double y)? а не через запятую double x,y

Нужно исправить код ("double sum(double,double)": невозможно преобразовать аргумент 1 из "A" в "double)
Нужно исправить код, не трогая мэйн и функцию, можно работать со структурой и что-то дописывать. #include <iostream> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru