-
Data: 2023-02-26 10:50:44
Temat: Re: Programowanie MCU - największa liczba
Od: KLoSS <n...@a...com.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 26.02.2023 o 01:35, Stachu Chebel pisze:
> Używam Kinetis Design Studio. MCU: Arm Cortex-M4. Dokładnie jest to
> MK22FN512VLH12. Definiuję zmienną globalną : double a; .
> W przerwaniu zmienna jest inkrementowana: a=a+Byle_Co;
> Program działa poprawnie, ale do pewnego momentu czasowego.
> W pewnym momencie idzie "w maliny". Sekwencja:
>
> a=a+Byle_Co;
> if(a>Max)a=0;
>
> rozwiązuje problem. Ile maksymalnie mogę ustawić Max? Za cholerę nie mogę
> się doszukać maksymalnej wartości zmiennej typu "double" dla mojego MCU.
Eksperymentalnie ustawiłem Max=1e6. Program nie idzie w maliny. Jakie może być
największe Max?
>
1. Double jest z definicji zmiennoprzecinkowe z określoną dokładnością
mantysy a dokładna definicja jest zależna m.im. od języka i kompilatora
i może być różna
Np .w c++ jest zdefiniowana tak:
https://en.cppreference.com/w/cpp/language/types
czyli zgodnie z "IEEE-754 binary64 format" co daje jako max jakieś
1.79769e+308
Nie sądzę aby to było problemem. Prędzej ilość miejsc znaczących mantysy
bo jeśli Byle_Co jest stałe to po określonej ilości iteracji 'a'
przestanie nam się zwiększać.
I jeszcze wielokrotne inkrementowanie liczb zmiennoprzecinkowych nie
jest dobrym pomysłem bo błąd zaokrągleń będzie nam narastał i przy
odpowiednio dużych iteracjach błąd może być większy niż Byle_Co.
I na koniec konstrukcja
> a=a+Byle_Co;
> if(a>Max)a=0;
jest zupełnie bez sensu. Bo skoro z definicji 'a' nie może być większe
niż Max to cały ten if nie zadziała nigdy prawidłowo.
Proponuję najpierw poczytać podstawy matematyki binarnej i jej ograniczenia.
Nie znam problemu ale zamiast double w przypadku inkrementacji zazwyczaj
lepiej użyć zmiennej stałoprzecinkowej.
--
KLoSS
Następne wpisy z tego wątku
- 26.02.23 11:19 Marek
- 26.02.23 11:22 Marek
- 26.02.23 14:15 Grzegorz Niemirowski
- 26.02.23 14:58 Marek
- 26.02.23 18:04 KLoSS
- 26.02.23 19:06 Marek
- 26.02.23 19:21 KLoSS
- 26.02.23 22:01 Marek
- 27.02.23 08:51 Dawid Rutkowski
- 27.02.23 09:55 Marek
- 27.02.23 10:28 Dawid Rutkowski
- 27.02.23 12:48 Adam Górski
- 27.02.23 16:18 J.F
- 27.02.23 16:23 J.F
- 27.02.23 17:48 Adam Górski
Najnowsze wątki z tej grupy
- Klip testowy, jak sie to używa
- Jak sie smazy elektronike z odleglosci kilkuset metrów?
- William Shockley, co-inventor of the transistor
- Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
- Zamek elektroniczny
- szablon do pasty DIY
- Głośnik potrzebny
- Silikonowy przewód ekranowany
- Wtyk bananowy ekranowany
- Co może być gorsze od pożaru elektryka?
- daltonizm
- Mały Linux
- Superkondensator. Czy to się uda?
- Stare filmy o technice
- Zasilanie własnych konstrukcji przez PoE
Najnowsze wątki
- 2025-11-09 Węże do tlenu medycznego
- 2025-11-09 Więcej miejsca na buspasach :-)
- 2025-11-08 kable zawieraja skrobie?
- 2025-11-08 Klip testowy, jak sie to używa
- 2025-11-08 Warszawa => Senior Cloud Engineer - AWS <=
- 2025-11-08 Pewnie za malo zarabial, to sie musial odstresowac
- 2025-11-08 Uszkodzenie na parkingu a odpowiedzialność sprawcy z OC
- 2025-11-08 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-11-08 Gdańsk => Senior Software Developer C++ <=
- 2025-11-08 Uszkodzenie na parkingu a odpowiedzialność sprawcy z OC
- 2025-11-08 Warszawa => Programista Microsoft Dynamics 365 Finance & Operations (D
- 2025-11-07 Warszawa => International Freight Forwarder <=
- 2025-11-07 Warszawa => C Programmer <=
- 2025-11-07 Warszawa => Starszy Programista C <=
- 2025-11-07 Warszawa => Senior Programmer C <=




Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei