-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.d103-176.icpnet.p
l!not-for-mail
From: KLoSS <n...@a...com.pl>
Newsgroups: pl.misc.elektronika
Subject: Re: Programowanie MCU - największa liczba
Date: Sun, 26 Feb 2023 10:50:44 +0100
Organization: http://www.wit.edu.pl
Message-ID: <ttfa1l$1su87$1@portraits.wsisiz.edu.pl>
References: <f...@g...com>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 26 Feb 2023 09:50:45 -0000 (UTC)
Injection-Info: portraits.wsisiz.edu.pl;
posting-host="d103-176.icpnet.pl:77.65.103.176";
logging-data="1997063"; mail-complaints-to="a...@w...edu.pl"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101
Thunderbird/102.8.0
Content-Language: pl
In-Reply-To: <f...@g...com>
X-Antivirus: Avast (VPS 230226-0, 26.2.2023), Outbound message
X-Antivirus-Status: Clean
Xref: news-archive.icm.edu.pl pl.misc.elektronika:778610
[ ukryj 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
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
- stalowe bezpieczniki
- Wyświtlacz ramki cyfrowej
- bateria na żądanie
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
Najnowsze wątki
- 2025-01-26 Trump-2 JUŻ bardzo łaskawy [1_500 ułaskawień skazanych za Bidena za "Kawkę na Kapitolu"]
- 2025-01-26 Brak bolca ochronnego ładowarki oznacza pożar
- 2025-01-24 Elektryfikacja w ODWROCIE
- 2025-01-25 AMS spalony szybkim zasilaczem USB
- 2025-01-24 stalowe bezpieczniki
- 2025-01-23 Zenek Kapelinder - ?
- 2025-01-25 Błonie => Sales Specialist <=
- 2025-01-25 Lublin => iOS Developer (Swift) <=
- 2025-01-24 Warszawa => Java Developer <=
- 2025-01-24 Białystok => iOS Developer (Swift experience) <=
- 2025-01-24 Warszawa => Programista Full Stack (.Net Core) <=
- 2025-01-24 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-01-24 Lublin => Delphi Programmer <=
- 2025-01-24 Kraków => Key Account Manager <=
- 2025-01-24 Lublin => Programista Delphi <=