-
1. Data: 2023-02-26 01:35:02
Temat: Programowanie MCU - największa liczba
Od: Stachu Chebel <s...@g...com>
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?
-
2. Data: 2023-02-26 10:18:09
Temat: Re: Programowanie MCU - największa liczba
Od: Dawid Rutkowski <d...@w...pl>
niedziela, 26 lutego 2023 o 01:35:04 UTC+1 Stachu Chebel napisał(a):
> 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?
Już lepiej napisz, ile wynosi Byle_co.
A długo musisz czekać na to "pójście w maliny"?
-
3. Data: 2023-02-26 10:27:27
Temat: Re: Programowanie MCU - największa liczba
Od: "J.F" <j...@p...onet.pl>
On Sat, 25 Feb 2023 16:35:02 -0800 (PST), Stachu Chebel wrote:
> 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?
Double na ARM? Nie wiem, ale jakies horendalnie duzo.
DBL_MAX
1.7e+308 ?
https://developer.arm.com/documentation/dui0491/f/Ba
bbfeda
Raczej niemozliwe, zebys tyle zrobil w petli ... ile wynosi Byle_co?
Ale jeszcze czemu program idzie w maliny - wyjatek jakis ?
J.
-
4. Data: 2023-02-26 10:50:44
Temat: Re: Programowanie MCU - największa liczba
Od: KLoSS <n...@a...com.pl>
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
-
5. Data: 2023-02-26 11:19:33
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 10:27:27 +0100, "J.F"
<j...@p...onet.pl> wrote:
> 1.7e+308 ?
A co w takiej zmiennej "się zapisze" po operacji (1.7e+307)+1? :-)
--
Marek
-
6. Data: 2023-02-26 11:22:40
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 10:50:44 +0100, KLoSS
<n...@a...com.pl> wrote:
> > 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.
A skąd to założenie, że a z definicji nie jest większe od Max?
--
Marek
-
7. Data: 2023-02-26 14:15:09
Temat: Re: Programowanie MCU - największa liczba
Od: "Grzegorz Niemirowski" <g...@g...net>
Marek <f...@f...com> napisał(a):
> A skąd to założenie, że a z definicji nie jest większe od Max?
Z pierwszego posta. Szukamy takiej wartości Max, która będzie największą
możliwą dla a.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
-
8. Data: 2023-02-26 14:58:50
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 14:15:09 +0100, "Grzegorz Niemirowski"
<g...@g...net> wrote:
> Z pierwszego posta. Szukamy takiej wartości Max, która będzie
> największą
> możliwą dla a.
Ale dlaczego zakladasz że Twórca nie wie co pisze? To chyba jasne że
autor zrobił skrót myślowy czyli " Max" to wartość graniczna lokalna
(na potrzeby algorytmu) a nie max możliwej (absolutna) dla a.
--
Marek
-
9. Data: 2023-02-26 18:04:44
Temat: Re: Programowanie MCU - największa liczba
Od: KLoSS <n...@a...com.pl>
W dniu 26.02.2023 o 11:19, Marek pisze:
> On Sun, 26 Feb 2023 10:27:27 +0100, "J.F" <j...@p...onet.pl>
> wrote:
>> 1.7e+308 ?
>
>
> A co w takiej zmiennej "się zapisze" po operacji (1.7e+307)+1? :-)
>
Sprowadź te liczby do wspólnego wykładnika to zobaczysz co się "zapisze".
Najlepiej rozpisz sobie to na kartce, dużej kartce ;-)
--
KLoSS
-
10. Data: 2023-02-26 19:06:15
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 18:04:44 +0100, KLoSS
<n...@a...com.pl> wrote:
> Najlepiej rozpisz sobie to na kartce, dużej kartce ;-)
Chodziło mi raczej o wynik operacji na zmiennej a nie na kartce.
--
Marek