Skocz do zawartości
szczawiosław

Komora termiczna - kontrola procesu fermentacji

Pomocna odpowiedź

Rozwinę.

Porównaj round(x) *10 i round(x*10).

Co będziesz miał np. przy x=3.14?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Chcę uzyskać liczbę z dokładnością do jednego miejsca po przecinku. Jeżeli zrobię round(SetTemp - AverageTemp) to uzyskam liczbę całkowitą, dlatego jest round((SetTemp - AverageTemp)*10). Jeżeli zrobił bym round(SetTemp - AverageTemp * 10) to uzyskła bym inny wynik, a bez sensu jest zapisywać SetTemp - AverageTemp do kolejnej zmiennej jeżeli wykorzystuje ją tylko w tym miejscu.

Dzięki temu zaokrąglam liczbę nie np. 3,14, a 31,4. Po zaokrągleniu otrzymuje odpowiednio 3 oraz 31. Jeżeli teraz podzielę drugą liczbę przez 10 uzyskam liczbę 3,1 czyli zaokrąglenie do jednego miejsca po przecinku tak jak tego potrzebuję.

Jedyny zbędny nawias to ten na przed round i przed ;.

Edytowano przez szczawiosław

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

No to spróbuj. Jeśli z round(3.14) * 10 wyjdzie Ci 31 to będziesz mógł się ze mnie śmiać na wszystkich forach, a ja wlazę pod stół i będę szczekać.

 

 

Edytowano przez ethanak
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Jest różnica w wyniku dla round((X - Y) * 10), round(X - Y * 10)?

Przyjmijmy X = 5, Y = 3,14.

Edytowano przez szczawiosław

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

owszem, ale nie o to chodzi. spójrz na te nawiasy. Jest różnica między round((x-y)*10) a (round (x-y)*10).

Edytowano przez ethanak

Udostępnij ten post


Link to post
Share on other sites
9 minut temu, szczawiosław napisał:

Jedyny zbędny nawias to ten na przed round i przed ;. 

Dobra, nie zrozumieliśmy się. Nawiasy zostały po jakiejś funkcji i zapomniałem usunąć, a napisałeś tak że zrozumiałem że te środkowe są zbędne w których znajduje się odejmowanie.

Udostępnij ten post


Link to post
Share on other sites

To popraw i pokaż. Na pocieszenie - @Belferek zrobił ten sam błąd. 🙂

Udostępnij ten post


Link to post
Share on other sites
21 godzin temu, ethanak napisał:

Na pocieszenie - @Belferek zrobił ten sam błąd

Ja tam swojego błędu w żadnym miejscu nie widzę - zapytałem, a szczawiosław odpowiedział i tyle.

Pozdrawiam,

Udostępnij ten post


Link to post
Share on other sites

Znalazłem jeszcze błąd w swoim kodzie. Funkcji abs() automatycznie zmienia float na int. Chciałem mieć amplitudę 1°C, a przez to miałem 2°C. na szczęście jest funkcja fabs() 🙂 Więc obeszło się bez większych kombinacji.

Udostępnij ten post


Link to post
Share on other sites

W  kwestii formalnej: funkcja abs nic nie zmienia, po prostu jej argument jest typu int i kompilator generuje kod zmiany typu (rzutowania) przed przekazaniem wartości do funkcji.

Niby mała różnica... ale jednak.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Głupi błąd którego wcześniej nie zauważyłem. No i regulacja PWM jest teraz płynniejsza.

Edytowano przez szczawiosław

Udostępnij ten post


Link to post
Share on other sites

Dość powszechny i nie ma się czego wstydzić. Kiedyś w Fortranie miałem funkcję abs i iabs (jak się pewnie domyślasz działały dokładnie odwrotnie)...

Czasem lepiej korzystać z makra.

 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...