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 16 lip 2025, o 02:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
    Autor Wiadomość
    PostNapisane: 10 sie 2018, o 18:13 
    Offline
    Użytkownik

    Dołączył(a): 01 sty 2013
    Posty: 169
    Pomógł: 0

    Hej !
    Znów wracam z prośbą.

    Przerobiłem pewną funkcję z Pascala.
    Tam utworzono funkcję o nazwie modd która zwracać ma jak to autor opisał w komentarzu -"wartosc dzielenia liczb rzeczywistych"
    Przerobiłem tę funkcję a następnie się jej przyjrzałem -
    wygląda ona tak:


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



    w oryginale

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


    Jednak z tego co widzę funkcja w tej postaci jest funkcją "modulo" - zwracającą resztę z dzielenia
    Funkcja w mojej ocenie w postaci jak ją przerobiłem powinna działać dobrze, więc przystąpiłem do kolejnych działań przy jej pomocy.

    Okazało się jednak, że wynik różni się od tego co powinienem otrzymać.
    Stwierdziłem to na podstawie współczynników jakie miałem wyłonione w tym samym programie w Excelu.

    Tam formuła z tą funkcją wyglądała tak: =MOD((6,2400408+628,3019501*F5);6,28318530718)
    W Pascalu wygląda tak: G:=modd((6.2400408+628.3019501*Cent),6.28318530718);
    więc w C powinna wyglądać tak: G = modd((6.2400408+628.3019501*Cent),6.28318530718);
    W taki sposób właśnie ją wywołuję.

    Zmienna Cent w tym wypadku wynosi 0.176057495

    Włąściwym wynikiem działania funkcji ( podejrzanym w Excellu ) powinna być liczba 3,759972625

    mnie w programie po wyświetleniu na lcd wychodzi 0.32767

    Podam jeszcze w jaki sposób ja wyświetlam na LCD - Jako że to jest zmienna typu double - rzutuję ją do INT
    wysw = (int) (G*10000);

    Nie wiem gdzie się mylę. Gdyby ktoś bardziej doświadczony zechciał spojrzeć na te działania a także sposób wyświetlania. Błąd podejrzewam już wszędzie.

    ------------------------ [ Dodano po: 56 minutach ]

    Pomogła zmiana zapisu działania w funkcji mod w ten sposób:

    Modd = x - y*(int)(x/y);

    ale za nic nie wiem dla czego poprzednia wersja nie działała!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2018, o 20:51 
    Offline
    Nowy

    Dołączył(a): 20 gru 2015
    Posty: 7
    Pomógł: 0

    Tylko zgaduje, ale moze ramu braklo na stosie jak obrabiales double. Rzutowanie d inta moze pomoglo

    Wysłane z mojego GT-I9505 przy użyciu Tapatalka



    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: 2 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 19 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