Niedokładność rzędu 0.1 lub 0.01 przy oper...
Najlepsza odpowiedź GwynBleidD 26.12.2014 01:52
Rivit
25.12.2014
Witam,
Mam taki problem, że jest niedokładność przy liczeniu na floatach.
SS'y w załączniku:
kod:
formatex(x, charsmax(x), "Wytrzymalosc \r(%i/%i) (+%i) \y(Zmniejsza obrazenia o \r%0.2f%%\y)", wytrzymalosc_gracza[id], limit, PobierzWytrzymalosc(id, 0, 1, 1), floatmul(float(PobierzWytrzymalosc(id, 1, 1, 1)), 0.26)); formatex(z, charsmax(z), "Kondycja \r(%i/%i) (+%i) \y(Zwieksza predkosc o \r%i\y)", kondycja_gracza[id], limit, PobierzKondycje(id, 0, 1, 1), PobierzKondycje(id, 1, 1, 1)); formatex(e,charsmax(e), "Obrazenia \r(%i/%i) (+%i) \y(Zwieksza obrazenia o \r%0.1f%%\y)", obrazenia_gracza[id], limit, PobierzObrazenia(id, 0, 1, 1), floatmul(float(PobierzObrazenia(id, 1, 1, 1)), 0.5)); formatex(a, charsmax(a), "Zrecznosc \r(%i/%i) (+%i) \y(Zwieksza szanse na unik o \r%0.2f%%\y)", zrecznosc[id], limit, PobierzZrecznosc(id, 0, 1, 1), float(PobierzZrecznosc(id, 1, 1, 1))*0.22)
Co może być przyczyną niedokładności?
grankee
26.12.2014
W czym floatmul jest lepsza od 1.4*3.5, że zasłużyła sobie na wystąpienie?
Ja na przykład miałem problemy z floatpower, a okazało się, że przemnożenie przez siebie floata działa świetnie.
Rivit
26.12.2014
Czyli jeżeli dobrze rozumiem, to mam postąpić tak:
- mam do pomnożenia 500*0.11
- mnożę 500*11
- dzielę przez 100.0
to jedyny sposób?
GwynBleidD
26.12.2014
Napisałem post tutaj, ale wyszedł długi i dość treściwy to pomyślałem, że jeszcze troszkę uzupełnię i zrobię z niego artykuł Ale dlaczego minusujesz?
Wytrzymałość jak mniemam jest liczbą całkowitą? Jeśli całkowitą, to pomnóż PobierzWytrzymalosc razy 100, następnie razy 13 i podziel przez 50 (Twój magiczny mnożnik 0.26 tylko zamieniony na ułamek zwykły, aby unikać floatów) i tak otrzymaną liczbę zapisz w zmiennej, np wynik. Teraz:
formatex(x, charsmax(x), "Wytrzymalosc \r(%i/%i) (+%i) \y(Zmniejsza obrazenia o \r%d.%02d%%\y)", wytrzymalosc_gracza[id], limit, PobierzWytrzymalosc(id, 0, 1, 1), wynik/100, wynik % 100)
W ten sposób zawsze otrzymasz dokładny wynik.
%02d wyświetla liczbę na 2ch pozycjach (czyli 2 znaki, ni mniej ni więcej) i uzupełnia zerami, więc jeśli zapodasz 144 dostaniesz 44, jeśli zapodasz 12 dostaniesz 12, jeśli zapodasz 2, dostaniesz 02.
Rivit
26.12.2014
Dałem minusa? Sorki, a da sie cofnąć? Bo na wersji mobilnej te przyciski są blisko siebie a zamarznietymi palcami ciezko trafic.
A co z moim sposobem z dzieleniem na koncu przez 100.0? Co w nim nie tak?
Rivit
26.12.2014
A jak zrobić coś takiego Twoją metodą?
Mam state niewidzialnosc, chcę obliczyć w jakim procencie mnie teraz widać.
Jak uniknąć tu floatów?
(255-niewidka) : 255
Pogrubione zawsze będzie całkowite, ale wynik nie
Jak to zapisać w formacie:
%d.%02d
Droso
27.12.2014
Według mnie jak już używasz procentów to floatów użyj i później floatround
GwynBleidD
27.12.2014
procenty = widocznosc*100/255Gdzie widoczność to liczba całkowita z przedziału od 0 do 255. Otrzymasz liczbę całkowitą i mimo dzielenia, cały czas operujemy na liczbach całkowitych.