Problem banalny dla speców. Iloczyn = 4294934760

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
siutek
Młodszy majsterkowicz
Posty: 8
Rejestracja: 3 gru 2014, 11:25

Problem banalny dla speców. Iloczyn = 4294934760

Post autor: siutek » 16 sie 2018, 18:44

Witam, problem zapewne banalny, ale nie dla mnie, laika ;)
Mam proste działanie wewnątrz funkcji opóźnienia:

delay(liczbaPierwsza * 1000)

Dopóki liczbaPierwsza jest mniejsza lub równa 32 wynik jest prawidłowy, ale gdy tylko liczbaPierwsza przyjmie wartość >= 33 wynik tego mnożenia robi się dziwny, bo 4294934760.

Wiem, że ma to związek z liczbą bitów etc. ale i tak nie wiele mi to mówi i nie wiem co z tym fantem zrobić :P

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


gavron
Młodszy majsterkowicz
Posty: 35
Rejestracja: 17 sie 2018, 07:43

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: gavron » 17 sie 2018, 07:50

Hej.
1. Bo masz za mało bitów
2. Zrób swoją funkcję delay, nie wiem w jakim języku piszesz ale mniej więcej tak:
Delay 1000
Powtórz delay tyle razy jaki masz czas

I już ;)
działa ci duzo więcej niz 32

Wysłane z mojego Neffos Y5s przy użyciu Tapatalka

Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: ethanak » 17 sie 2018, 14:00

Bo mnożysz liczbę szesnastobitową przez szesnastobitową, i więcej niż 32767 z takiego mnożenia nie dostaniesz.
Zmień 1000 na 1000L - powinno pomóc.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
siutek
Młodszy majsterkowicz
Posty: 8
Rejestracja: 3 gru 2014, 11:25

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: siutek » 17 sie 2018, 14:38

ok, dzięki. faktycznie pomogło.
a skoro jesteśmy już przy tym temacie, to czy ktośjest w stanie rozjaśnić mi jaka jest różnica między 1000L a 1000UL???
Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: ethanak » 17 sie 2018, 15:02

1000L to liczba 32-bitowa ze znakiem. 1000UL to liczba 32-bitowa bez znaku.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
siutek
Młodszy majsterkowicz
Posty: 8
Rejestracja: 3 gru 2014, 11:25

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: siutek » 17 sie 2018, 15:52

ze znakiem? bez znaku? tzn że pierwsza może być również ujemną, ale ma po połowie wartości w obie strony zera. Natomiast bez znaku tzn tylko dodatnia, z całą wartością powyżej zera? dobrze kombinuję?
Awatar użytkownika
ethanak
Złota rączka
Posty: 782
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem banalny dla speców. Iloczyn = 4294934760

Post autor: ethanak » 17 sie 2018, 16:06

Dokładnie tak.
Pamiętaj, że nie należy mieszać w jednym wyrażeniu signed i unsigned, bo wynik może być nieoczekiwany (tak jak w Twoim przypadku z mnożenia wyszła liczba ujemna, a rzutowanie na unsigned long dało bezsensowny wynik).
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
ODPOWIEDZ

Strony partnerskie: