RTV forum PL | NewsGroups PL

Programowanie MCU - największa liczba

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Programowanie MCU - największa liczba

Goto page 1, 2  Next

Stachu Chebel
Guest

Sun Feb 26, 2023 2:35 am   



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?

Dawid Rutkowski
Guest

Sun Feb 26, 2023 11:18 am   



niedziela, 26 lutego 2023 o 01:35:04 UTC+1 Stachu Chebel napisał(a):
Quote:
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"?

J.F
Guest

Sun Feb 26, 2023 11:27 am   



On Sat, 25 Feb 2023 16:35:02 -0800 (PST), Stachu Chebel wrote:
Quote:
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/Babbfeda

Raczej niemozliwe, zebys tyle zrobil w petli ... ile wynosi Byle_co?

Ale jeszcze czemu program idzie w maliny - wyjatek jakis ?

J.

KLoSS
Guest

Sun Feb 26, 2023 11:50 am   



W dniu 26.02.2023 o 01:35, Stachu Chebel pisze:
Quote:
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

Quote:
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

Marek
Guest

Sun Feb 26, 2023 12:19 pm   



On Sun, 26 Feb 2023 10:27:27 +0100, "J.F"
<jfox_xnospamx@poczta.onet.pl> wrote:
Quote:
1.7e+308 ?


A co w takiej zmiennej "się zapisze" po operacji (1.7e+307)+1? :-)

--
Marek

Marek
Guest

Sun Feb 26, 2023 12:22 pm   



On Sun, 26 Feb 2023 10:50:44 +0100, KLoSS
<nospam.klossik@alchemy.com.pl> wrote:
Quote:
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

Grzegorz Niemirowski
Guest

Sun Feb 26, 2023 3:15 pm   



Marek <fake@fakeemail.com> napisał(a):
Quote:
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/

Marek
Guest

Sun Feb 26, 2023 3:58 pm   



On Sun, 26 Feb 2023 14:15:09 +0100, "Grzegorz Niemirowski"
<grzegorz@grzegorz.net> wrote:
Quote:
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

KLoSS
Guest

Sun Feb 26, 2023 7:04 pm   



W dniu 26.02.2023 o 11:19, Marek pisze:
Quote:
On Sun, 26 Feb 2023 10:27:27 +0100, "J.F" <jfox_xnospamx@poczta.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

Marek
Guest

Sun Feb 26, 2023 8:06 pm   



On Sun, 26 Feb 2023 18:04:44 +0100, KLoSS
<nospam.klossik@alchemy.com.pl> wrote:
Quote:
Najlepiej rozpisz sobie to na kartce, dużej kartce Wink

Chodziło mi raczej o wynik operacji na zmiennej a nie na kartce.

--
Marek

KLoSS
Guest

Sun Feb 26, 2023 8:21 pm   



W dniu 26.02.2023 o 19:06, Marek pisze:
Quote:
On Sun, 26 Feb 2023 18:04:44 +0100, KLoSS
nospam.klossik@alchemy.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.


"Zmienna" to tylko miejsce do zapamiętywania wartości bez znaczenia czy
na kartce, czy kamyki na piasku, czy elektrony w krzemie.

Jak chcesz tylko wiedzieć jaki będzie wynik a kartka zła to sprawdź na
MCU, szybciej byś sprawdził niż zadał zapytał na grupie i czekał na
odpowiedź.

A jak chcesz wiedzieć dlaczego tak, to bez kartki się nie obejdzie.

--
KLoSS

Marek
Guest

Sun Feb 26, 2023 11:01 pm   



On Sun, 26 Feb 2023 19:21:46 +0100, KLoSS
<nospam.klossik@alchemy.com.pl> wrote:
Quote:
A jak chcesz wiedzieć dlaczego tak, to bez kartki się nie obejdzie.

Serio nie zrozumiałeś kontekstu pytania?

--
Marek

Dawid Rutkowski
Guest

Mon Feb 27, 2023 9:51 am   



niedziela, 26 lutego 2023 o 22:01:39 UTC+1 Marek napisał(a):
Quote:
On Sun, 26 Feb 2023 19:21:46 +0100, KLoSS
nospam....@alchemy.com.pl> wrote:
A jak chcesz wiedzieć dlaczego tak, to bez kartki się nie obejdzie.
Serio nie zrozumiałeś kontekstu pytania?

Hmm, a odpowiedź ma być "tyle samo"?
Czy jakaś nieskończoność?
W sumie też nie wiem ile to będzie MAX_DOUBLE+1.
Trzeba w IEEE-854 sprawdzić.

Hmm, a czy w C można:
double d=9;
d++;
?

A nie skomentujecie pomysłu robienia sobie licznika z double?
I założenia, że "zmiennoprzecinkowa"nkażdą wartość przyjmie?
W Bajtku był taki cykl "programować może każdy".
Może i prawda, ale "zaprogramować" już niekoniecznie...

Marek
Guest

Mon Feb 27, 2023 10:55 am   



On Sun, 26 Feb 2023 23:51:16 -0800 (PST), Dawid Rutkowski
<drutkow1@wp.pl> wrote:
Quote:
W sumie też nie wiem ile to będzie MAX_DOUBLE+1.

Ale ja nie wybrałem MAX_DOUBLE do operacji sumy, zwróć uwagę.

--
Marek

Dawid Rutkowski
Guest

Mon Feb 27, 2023 11:28 am   



poniedziałek, 27 lutego 2023 o 09:55:11 UTC+1 Marek napisał(a):
Quote:
On Sun, 26 Feb 2023 23:51:16 -0800 (PST), Dawid Rutkowski
drut...@wp.pl> wrote:
W sumie też nie wiem ile to będzie MAX_DOUBLE+1.
Ale ja nie wybrałem MAX_DOUBLE do operacji sumy, zwróć uwagę.

No racja, to MAX_DOUBLE czy też DBL_MAX to jest minimum 1.79769e+308

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Programowanie MCU - największa liczba

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map