Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 20 lip 2025, o 02:26


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 10 sie 2012, o 20:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 paź 2011
    Posty: 582
    Pomógł: 17

    Witam,
    Mam kilka pytań odnośnie liczb zmienno przeciekowych.

    Załóżmy, że zdefinujemy sobie pierwiastek z 5
    #define sqrt5 2.23606797749979
    i teraz pomnożymy to przez np.2
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Rozumiem, że w obu przypadkach wynik będzie równy 4?

    Czy jest jakaś możliwość, aby zmienna b przyjęła wynik w postaci zmiennoprzecinkowej?


    //Bardzo proszę nie offtopicować i nie pisać, że robie źlę i nie powinno się używać liczb zmiennoprzecinkowych w taki sposób. tylko w sposób jaki jest opisany w książce(czyli na liczbach całkowitych)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 20:18 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    jest możliwość , ale jest zasobożerna używając bibliotek matematycznych
    niemniej nie korzystałem z nich więc moje informację mogą być niemiarodajne

    oczywiście jeśli kolega uważa za ot to zaraz usunę , bo z brakiem samokrytyki się nie dyskutuje .
    bo i niby jak z uint zrobić przecinek ?? użyj float .. ale jak pisałem AVR nie potrafi operować bezpośrednio na takich liczbach więc
    koniecznością jest uzycie bibliotek matematycznych

    zresztą ja się nie znam skoro wynika z mojego postu że robisz źle .

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 20:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 paź 2011
    Posty: 582
    Pomógł: 17

    SunRiver napisał(a):
    jest możliwość , ale jest zasobożerna używając bibliotek matematycznych

    Mógłbyś to nieco przybliżyć?

    Dodając nagłówek <math.h>
    dalej zmienna b wynosi 4 ;/ (przynajmniej w symulatorze)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 20:27 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    jak dodałem wyżej z uint nie zrobisz zmiennoprzecinkowej musisz użyć typu float
    ale operacje na tym typie wprost nie są możliwe na AVR ze względu na brak rozkazów
    na poziomie maszynowym.

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 20:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 paź 2011
    Posty: 582
    Pomógł: 17

    Trochę się pomieszałem i piszę o czym innym, a sam chcę czegoś innego :D

    Wynik, ma być liczbą całkowitą.
    Natomiast chcę wiedzieć w jaki sposób zostanie obliczona.

    Zmodyfikujmy nieco naszą stałą:
    #define stala 2.93606797749979

    uint8_t wynik;
    wynik = stala*2;
    Rozumiem, że teraz wynik będzie wynosił 5? (zostało to obliczone na etapie kompilacji).


    Ale zróbmy taki trik.
    Mamy zmienną (również całkowitą)
    uint8_t zmiena;

    I teraz ta zmienna będzie wzrastała wraz z kliknięciem klawisza

    Taki kod;
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Teraz już wynik nie może być policzony na etapie kompilacji..

    Czy w takim wypadku dalej zmienna będzie wynosiła 5?

    Z jaką dokładnością wtedy liczona jest ta zmienna wynik?
    Bo przecież jeśli zdefiniowalibyśmy tą stałą np. ze 100 miejscami po przecinku to chyba i tak przy kompilowaniu programu będzie ona skracana (do iluśtam miejsc po przecinku a nie do 100?) mam rację?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 20:42 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    na oko chyba zaokrągli tą twoja stałą do 3 i tyle

    nie symulowałem tego i nie chce mi się sprawdzać

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 22:23 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    xamrex napisał(a):
    Witam,
    Mam kilka pytań odnośnie liczb zmienno przeciekowych.

    Załóżmy, że zdefinujemy sobie pierwiastek z 5
    #define sqrt5 2.23606797749979
    i teraz pomnożymy to przez np.2
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Rozumiem, że w obu przypadkach wynik będzie równy 4?

    Czy jest jakaś możliwość, aby zmienna b przyjęła wynik w postaci zmiennoprzecinkowej?



    Ja też chyba totalnie nie zrozumiałem pytania więc jak coś to się nie denerwuj - ale czy nie powinieneś tego robić na typach float jak już się upierasz na liczby zmiennoprzecinkowe - czyli tak :


    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Ja nie wiem w ogóle jak ty się możesz spodziewać JAKIEGOKOLWIEK innego wyniku niż 4 w przypadku tych swoich przykładów - toż skoro działasz na liczbach całkowitych to, to co po przecinku idzie w KOSMOS :(

    A jeśli już chciałbyś koniecznie obliczyć to na całkowitych to po lekkim zmodyfikowaniu stałej czyli zwiększeniu jak sam zauważyłeś bo pierwiastek z pięciu * 2 nigdy nie byłby równy przecież 5. To jak zrobisz to co niżej - już spokojnie otrzymasz 5 czyli wszystko będzie prawidłowo zaokrąglane - ale jak widzisz działamy TYLKO na liczbach całkowitych ;)

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    może więc to da ci coś do myślenia ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 21 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO