Thread View: pl.comp.lang.c
7 messages
7 total messages
Started by Stachu Chebel
Thu, 09 Feb 2023 21:48
Zamiana real na int
Author: Stachu Chebel
Date: Thu, 09 Feb 2023 21:48
Date: Thu, 09 Feb 2023 21:48
15 lines
620 bytes
620 bytes
Jak już kiedyś wspominałem, nie jestem ekspertem w C, stąd moje pytanie może wyglądać naiwnie. double a; uint16_t k; a=1.7; k=(uint16_t)(a); Ile będzie wynosić k? 1 czy 2? Można odpowiedzieć weź se skompiluj, uruchom, to zobaczysz. Tak, ale sprawa dotyczy programowania MCU i akurat z pewnych względów debuggowanie jest dosyć upierdliwe. Kolejne pytania do Kolegów znających Pascal'a. 1) Jakie są odpowidniki w C, Pascal'owych funkcji Round i Floor? 2) Jak efektywne są ich kody maszynowe? Chodzi o czas.
Re: Zamiana real na int
Author: Stachu Chebel
Date: Thu, 09 Feb 2023 22:06
Date: Thu, 09 Feb 2023 22:06
18 lines
777 bytes
777 bytes
piątek, 10 lutego 2023 o 06:48:17 UTC+1 Stachu Chebel napisał(a): > Jak już kiedyś wspominałem, nie jestem ekspertem w C, stąd moje pytanie może wyglądać naiwnie. > double a; > uint16_t k; > a=1.7; > k=(uint16_t)(a); > > Ile będzie wynosić k? 1 czy 2? Można odpowiedzieć weź se skompiluj, > uruchom, to zobaczysz. Tak, ale sprawa dotyczy programowania MCU > i akurat z pewnych względów debuggowanie jest dosyć upierdliwe. > > Kolejne pytania do Kolegów znających Pascal'a. > 1) Jakie są odpowidniki w C, Pascal'owych funkcji Round i Floor? > 2) Jak efektywne są ich kody maszynowe? Chodzi o czas. Aha, GNU Arm CORTEX M4
Re: Zamiana real na int
Author: Stachu Chebel
Date: Fri, 10 Feb 2023 06:03
Date: Fri, 10 Feb 2023 06:03
40 lines
1514 bytes
1514 bytes
piątek, 10 lutego 2023 o 13:40:10 UTC+1 Arnold Ziffel napisał(a): > Stachu Chebel <stch...@gmail.com> wrote: > > > Jak już kiedyś wspominałem, nie jestem ekspertem w C, stąd moje pytanie może wyglądać naiwnie. > > double a; > > uint16_t k; > > a=1.7; > > k=(uint16_t)(a); > > > > Ile będzie wynosić k? 1 czy 2? > Będzie 1. Rzutowanie po prostu pozbywa się części po przecinku, nie robi > zaokrąglania. > > Można odpowiedzieć weź se skompiluj, uruchom, to zobaczysz. Tak, ale > > sprawa dotyczy programowania MCU i akurat z pewnych względów > > debuggowanie jest dosyć upierdliwe. > A masz tam LEDa albo dowolną linię GPIO? > > if(k == 1) led_on(); > > Taki LED debugging. > > 1) Jakie są odpowidniki w C, Pascal'owych funkcji Round i Floor? > W C nie ma, ale jest w bibliotece standardowej (math), nazywają się, > niespodzianka, round() i floor(). > > 2) Jak efektywne są ich kody maszynowe? Chodzi o czas. > Skompiluj, zobacz co wygeneruje kompilator. To zależy od platformy. > > -- > Przychodzi baba do lekarza: > - Panie doktorze, dziękuję za wspaniałe leczenie. > - Ależ ja leczyłem pani męża, nie panią! > - Tak, tak, ale ja po nim wszystko dziedziczę... ============== Dzięki, wszystko jasne
Re: Zamiana real na int
Author: arnold@hootervil
Date: Fri, 10 Feb 2023 12:40
Date: Fri, 10 Feb 2023 12:40
36 lines
1052 bytes
1052 bytes
Stachu Chebel <stchebel@gmail.com> wrote: > Jak ju¿ kiedy¶ wspomina³em, nie jestem ekspertem w C, st±d moje pytanie mo¿e wygl±daæ naiwnie. > double a; > uint16_t k; > a=1.7; > k=(uint16_t)(a); > > Ile bêdzie wynosiæ k? 1 czy 2? Bêdzie 1. Rzutowanie po prostu pozbywa siê czê¶ci po przecinku, nie robi zaokr±glania. > Mo¿na odpowiedzieæ we¼ se skompiluj, uruchom, to zobaczysz. Tak, ale > sprawa dotyczy programowania MCU i akurat z pewnych wzglêdów > debuggowanie jest dosyæ upierdliwe. A masz tam LEDa albo dowoln± liniê GPIO? if(k == 1) led_on(); Taki LED debugging. > 1) Jakie s± odpowidniki w C, Pascal'owych funkcji Round i Floor? W C nie ma, ale jest w bibliotece standardowej (math), nazywaj± siê, niespodzianka, round() i floor(). > 2) Jak efektywne s± ich kody maszynowe? Chodzi o czas. Skompiluj, zobacz co wygeneruje kompilator. To zale¿y od platformy. -- Przychodzi baba do lekarza: - Panie doktorze, dziêkujê za wspania³e leczenie. - Ale¿ ja leczy³em pani mê¿a, nie pani±! - Tak, tak, ale ja po nim wszystko dziedziczê...
Re: Zamiana real na int
Author: JDX
Date: Mon, 20 Feb 2023 07:28
Date: Mon, 20 Feb 2023 07:28
7 lines
465 bytes
465 bytes
On 10.02.2023 06:48, Stachu Chebel wrote: [...] > Ile będzie wynosić k? 1 czy 2? Można odpowiedzieć weź se skompiluj, > uruchom, to zobaczysz. Tak, ale sprawa dotyczy programowania MCU > i akurat z pewnych względów debuggowanie jest dosyć upierdliwe. Jakiś mały kawałek kodu to można sobie do assemblera skompilować i przeanalizować. Można też skorzystać z godbolta-a: https://godbolt.org/z/o7zrWT44x. w ramach testu zmień sobie też -O3 na -O0.
Re: Zamiana real na int
Author: Przemek Biernat
Date: Wed, 22 Feb 2023 11:10
Date: Wed, 22 Feb 2023 11:10
35 lines
1116 bytes
1116 bytes
On Friday, February 10, 2023 at 6:48:17 AM UTC+1, Stachu Chebel wrote: > Jak już kiedyś wspominałem, nie jestem ekspertem w C, stąd moje pytanie może wyglądać naiwnie. > double a; > uint16_t k; > a=1.7; > k=(uint16_t)(a); > > Ile będzie wynosić k? 1 czy 2? Można odpowiedzieć weź se skompiluj, > uruchom, to zobaczysz. Tak, ale sprawa dotyczy programowania MCU > i akurat z pewnych względów debuggowanie jest dosyć upierdliwe. > > Kolejne pytania do Kolegów znających Pascal'a. > 1) Jakie są odpowidniki w C, Pascal'owych funkcji Round i Floor? > 2) Jak efektywne są ich kody maszynowe? Chodzi o czas. Nie używaj double'a tylko sobie zaimplementuj klasę decimal na dwóch unsinged int plus jedną zmienną jako flagę dla znaku. Np: class decimal { private: unsigned int calkowite; unsigned int ulamki; }; Do tego dorób property w public i wszystkie operatory oraz metody które będziesz potrzebował.
Re: Zamiana real na int
Author: Maciek Godek
Date: Wed, 01 Mar 2023 04:06
Date: Wed, 01 Mar 2023 04:06
70 lines
2274 bytes
2274 bytes
środa, 22 lutego 2023 o 20:10:27 UTC+1 Przemek Biernat napisał(a): > On Friday, February 10, 2023 at 6:48:17 AM UTC+1, Stachu Chebel wrote: > > Jak już kiedyś wspominałem, nie jestem ekspertem w C, stąd moje pytanie może wyglądać naiwnie. > > double a; > > uint16_t k; > > a=1.7; > > k=(uint16_t)(a); > > > > Ile będzie wynosić k? 1 czy 2? Można odpowiedzieć weź se skompiluj, > > uruchom, to zobaczysz. Tak, ale sprawa dotyczy programowania MCU > > i akurat z pewnych względów debuggowanie jest dosyć upierdliwe. > > > > Kolejne pytania do Kolegów znających Pascal'a. > > 1) Jakie są odpowidniki w C, Pascal'owych funkcji Round i Floor? > > 2) Jak efektywne są ich kody maszynowe? Chodzi o czas. > Nie używaj double'a tylko sobie zaimplementuj klasę decimal na dwóch unsinged int plus jedną zmienną jako flagę dla znaku. > > Np: > > class decimal > { > > private: > > unsigned int calkowite; > unsigned int ulamki; > > }; > > Do tego dorób property w public i wszystkie operatory oraz metody które będziesz potrzebował. Szczerze - to zależy. Jeżeli mikrokontroler jest dość duży, a szczególnie jeśli ma koprocesor, to używanie double nie musi być złym pomysłem. Natomiast na mniejszych urządzeniach w pierwszej kolejności bym próbował raczej pracować na liczbach ułamkowych o stałej precyzji, realizowanych przez zwyczajne inty (albo ich odmiany). Jeżeli miałbym implementować swoje ułamki, to raczej bym zajrzał do gotowej biblioteki - np. do GMP, acz w większości zastosowań ułamki raczej nie będą potrzebne. Z kolei na czymś w rodzaju: double a; uint16_t k; a=1.7; k=(uint16_t)(a); nigdy bym nie polegał. Jeżeli już, pisałbym k = (uint16_t) floor(a); albo k = (uint16_t) ceil(a); albo k = (uint16_t) round(a); po zainkludowaniu <math.h> w zależności od tego, jakiego bym oczekiwał zachowania.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads