ATNEL tech-forum
https://forum.atnel.pl/

Funkcja modulo dla float
https://forum.atnel.pl/topic21115.html
Strona 1 z 1

Autor:  Jarosław J [ 10 sie 2018, o 18:13 ]
Tytuł:  Funkcja modulo dla float

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!

Autor:  maki26 [ 10 sie 2018, o 20:51 ]
Tytuł:  Re: Funkcja modulo dla float

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

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/