Насколько точны вычисления в stm32?

У меня есть план проекта, в котором есть вычисления, требующие высокой точности, которые позже будут иметь вычисления с числами после запятых, такими как 245.5431657288. из некоторой информации, которую я прочитал, чтобы сделать проект успешным, он должен использовать 32 байта, изначально я хотел использовать arduino due, но по некоторым причинам Меня больше интересовало использование STM32, но мои знания о STM32 невелики, особенно с точки зрения уровня точности расчета, поэтому я спрашиваю, подходит ли STM32 для моего проекта? Надеюсь, мой вопрос можно понять, спасибо.

, 👍2

Обсуждение

не вопрос arduino, @jsotola

числа после запятых ... вы имеете в виду числа после десятичной точки? ... запятая - это , ... они называются десятичными знаками ... "245.5431657288" имеет 10 десятичных знаков в дробной части, @jsotola

вы можете преобразовать в целое число, умножив ... 245.5431657288 становится 2455431657288, что является шестнадцатеричным 23B B321 B748 ... это укладывается в 43 бита, @jsotola

Существует несколько совместимых с arduino устройств, основанных на архитектуре STM32. Понимание точности различных предложений процессоров является ключом к правильному выбору дизайна. Я считаю, что этот вопрос по теме., @RowanP

Введение в блоки с плавающей запятой(fpu) для микроконтроллеров STM32 можно найти по адресу https://www.st.com/resource/en/application_note/dm00047230-floating-point-unit-demonstration-on-stm32-microcontrollers-stmicroelectronics.pdf, @RowanP

Вы должны искать платформу, которая поддерживает плавающую точку двойной точности, то есть 64-битные поплавки. Согласно ссылке RowanP, некоторые STM32 делают это. Или вы можете сделать 64-битную фиксированную точку на любом Arduino, но это может быть нелегко., @Edgar Bonet

Аппаратное обеспечение не влияет на точность. Программное обеспечение влияет на точность. Аппаратное обеспечение влияет на эффективность обработки при разной точности., @Majenko


1 ответ


5

Аппаратное обеспечение не влияет на точность вычислений. Это зависит исключительно от программного обеспечения - используете ли вы float с одинарной или двойной точностью, отключаете ли флаги компилятора двойную точность для экономии места (как это делают некоторые 8-битные конфигурации) и т. Д.

Выбор оборудования влияет только на эффективность обработки при различных прецизионностях, например, при наличии FPU или при какой точности FPU может работать (использование прецизионностей вне диапазона FPU будет влиять только на скорость, а не на точность).

И stm32, и due являются микроконтроллерами на базе ARM, поэтому любые различия будут зависеть от того, какие дополнения есть в любом конкретном чипе (например, FPU).

,

Насколько я знаю, только компилятор AVR по умолчанию отключает двойную точность. Для других архитектур я бы предположил, что если аппаратное обеспечение не имеет (или ограничено) поддержки FPU, компилятор будет выдавать код эмуляции (как это было принято и для x86, прежде чем они включили FPU)., @PMF

Я только что проверил gcc на AVR: этот компилятор имеет программную поддержку double. Я не уверен, что набор инструментов Arduino использует компилятор gcc; однако можно было бы использовать компилятор gcc с Arduino Uno и подобными устройствами вместо "официального"., @Martin Rosenau

@MartinRosenau В зависимости от того, какая версия ядра у него может быть включена опция командной строки, которая заставляет опалять точность при использовании double., @Majenko