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:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
w oryginale
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!