-
11. Data: 2023-02-26 19:21:46
Temat: Re: Programowanie MCU - największa liczba
Od: KLoSS <n...@a...com.pl>
W dniu 26.02.2023 o 19:06, Marek pisze:
> 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.
>
"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
-
12. Data: 2023-02-26 22:01:34
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 19:21:46 +0100, KLoSS
<n...@a...com.pl> wrote:
> A jak chcesz wiedzieć dlaczego tak, to bez kartki się nie obejdzie.
Serio nie zrozumiałeś kontekstu pytania?
--
Marek
-
13. Data: 2023-02-27 08:51:16
Temat: Re: Programowanie MCU - największa liczba
Od: Dawid Rutkowski <d...@w...pl>
niedziela, 26 lutego 2023 o 22:01:39 UTC+1 Marek napisał(a):
> On Sun, 26 Feb 2023 19:21:46 +0100, KLoSS
> <n...@a...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...
-
14. Data: 2023-02-27 09:55:07
Temat: Re: Programowanie MCU - największa liczba
Od: Marek <f...@f...com>
On Sun, 26 Feb 2023 23:51:16 -0800 (PST), Dawid Rutkowski
<d...@w...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ę.
--
Marek
-
15. Data: 2023-02-27 10:28:16
Temat: Re: Programowanie MCU - największa liczba
Od: Dawid Rutkowski <d...@w...pl>
poniedziałek, 27 lutego 2023 o 09:55:11 UTC+1 Marek napisał(a):
> On Sun, 26 Feb 2023 23:51:16 -0800 (PST), Dawid Rutkowski
> <d...@w...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
-
16. Data: 2023-02-27 12:48:06
Temat: Re: Programowanie MCU - największa liczba
Od: Adam Górski <gorskiamalpawpkropkapl@xx>
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?
>
Problemem jest , że double jest zmiennoprzecinkowe i jak każdy typ
posiada swoją rozdzielczość.
W przypadku a=a+Byle_co; w pewnym momencie osiągnie wartość stacjonarną
i nie będzie się już zwiększać bo Byle_Co będzie poniżej błędu
pojedynczego bitu dla formatu double ( no chyba że się przekręci ).
Taki przykład:
Czy double i =
1000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
00000000.0
da się zwiększać o
0,00000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000001
?
Nie.
Z tego samego powodu z którego int64_t nie da się zwiększać o 0,1.
Jeżeli chcesz żeby to działało to np :
int64_t a = a + Byle_co; gdzie Byle_co >= 1 żeby miało sens.
double b = (double) a * CONST_VALUE;
Poza tym używanie double w przerwaniu to niekoniecznie dobry pomysł ,
ale to już inna historia.
Jeżeli mijam się z prawdą lub jak to się kiedyś mówiło - kłamię , proszę
o korektę.
Pozdrawiam
Adam Górski
-
17. Data: 2023-02-27 16:18:51
Temat: Re: Programowanie MCU - największa liczba
Od: "J.F" <j...@p...onet.pl>
On Sun, 26 Feb 2023 14:58:50 +0100, Marek wrote:
> 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.
Moze nie wiedziec, ale zadeklarował double a.
A przynajmniej tak pisze.
A zmienna double nie moze miec większej wartosci, nie da sie.
J.
-
18. Data: 2023-02-27 16:23:44
Temat: Re: Programowanie MCU - największa liczba
Od: "J.F" <j...@p...onet.pl>
On Mon, 27 Feb 2023 12:48:06 +0100, Adam Górski wrote:
> 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?
>>
>
> Problemem jest , że double jest zmiennoprzecinkowe i jak każdy typ
> posiada swoją rozdzielczość.
>
> W przypadku a=a+Byle_co; w pewnym momencie osiągnie wartość stacjonarną
> i nie będzie się już zwiększać bo Byle_Co będzie poniżej błędu
> pojedynczego bitu dla formatu double ( no chyba że się przekręci ).
Sugerujesz ze "program idzie w maliny" oznacza, tzn jest skutkiem
tego, ze przestala sie zmienna zwiekszac?
Moze i tak.
Zanim sie to osiągnie, to bedzie jeszcze etap, ze zwiększa sie o nieco
inną wartosc, bo jest to Byle_co zaokrąglane do aktualnej
rodzielczosci.
Ale tak czy inaczej to nastąpi po bardzo wielu dodawaniach, kolega by
chyba nie doczekal.
J.
-
19. Data: 2023-02-27 17:48:44
Temat: Re: Programowanie MCU - największa liczba
Od: Adam Górski <gorskiamalpawpkropkapl@xx>
W dniu 27.02.2023 o 16:23, J.F pisze:
> On Mon, 27 Feb 2023 12:48:06 +0100, Adam Górski wrote:
>> 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?
>>>
>>
>> Problemem jest , że double jest zmiennoprzecinkowe i jak każdy typ
>> posiada swoją rozdzielczość.
>>
>> W przypadku a=a+Byle_co; w pewnym momencie osiągnie wartość stacjonarną
>> i nie będzie się już zwiększać bo Byle_Co będzie poniżej błędu
>> pojedynczego bitu dla formatu double ( no chyba że się przekręci ).
>
>
> Sugerujesz ze "program idzie w maliny" oznacza, tzn jest skutkiem
> tego, ze przestala sie zmienna zwiekszac?
> Moze i tak.
>
> Zanim sie to osiągnie, to bedzie jeszcze etap, ze zwiększa sie o nieco
> inną wartosc, bo jest to Byle_co zaokrąglane do aktualnej
> rodzielczosci.
>
> Ale tak czy inaczej to nastąpi po bardzo wielu dodawaniach, kolega by
> chyba nie doczekal.
>
> J.
Nie mogę sobie tego inaczej wyobrazić skoro po ograniczeniu do jakiegoś
poziomu - działa.
Chętnie usłyszałbym inny powód.
Pozdrawiam
Adam Górski
-
20. Data: 2023-02-27 19:08:52
Temat: Re: Programowanie MCU - największa liczba
Od: "J.F" <j...@p...onet.pl>
On Mon, 27 Feb 2023 17:48:44 +0100, Adam Górski wrote:
> W dniu 27.02.2023 o 16:23, J.F pisze:
>> On Mon, 27 Feb 2023 12:48:06 +0100, Adam Górski wrote:
>>> 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?
>>>>
>>>
>>> Problemem jest , że double jest zmiennoprzecinkowe i jak każdy typ
>>> posiada swoją rozdzielczość.
>>>
>>> W przypadku a=a+Byle_co; w pewnym momencie osiągnie wartość stacjonarną
>>> i nie będzie się już zwiększać bo Byle_Co będzie poniżej błędu
>>> pojedynczego bitu dla formatu double ( no chyba że się przekręci ).
>>
>>
>> Sugerujesz ze "program idzie w maliny" oznacza, tzn jest skutkiem
>> tego, ze przestala sie zmienna zwiekszac?
>> Moze i tak.
>>
>> Zanim sie to osiągnie, to bedzie jeszcze etap, ze zwiększa sie o nieco
>> inną wartosc, bo jest to Byle_co zaokrąglane do aktualnej
>> rodzielczosci.
>>
>> Ale tak czy inaczej to nastąpi po bardzo wielu dodawaniach, kolega by
>> chyba nie doczekal.
>>
> Nie mogę sobie tego inaczej wyobrazić skoro po ograniczeniu do jakiegoś
> poziomu - działa.
Werjsa druga - osiaga wartosc maksymalną, jakis wjątek sie generuje
i nie wiadomo co program wtedy zrobi ..
J.