←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

dodawanie do float

Locked

mierzwi's Photo mierzwi 07.05.2011

Witam, dlaczego jak mam coś takiego (akurat tu odejmowanie ale przy dodawaniu też tak jest)
jakis_tam_float[id] = jakis_tam_float[id] - 0.5;
to jak sprawdzę jaki jest ten float to pisze -0.4, jak 2 razy dodam takie coś to pisze -1.0, a jak 3 to -1.4, tak się dzieje tylko na linuxie, na windowsie jest normalnie, może ktoś zna tego przyczynę ?

wycinek z serwa:

-0.4
funfel : /a

-1.0
funfel : /a

-1.4
funfel : /a

-2.0
funfel : /a

komenda /a odejmuje 0.5


@edit: dobra naprawiłem to, lecz to ładnie nie wygląda
jakis_tam_float[id] = jakis_tam_float[id] - 0.5000001;
jakis_tam_float[id] = jakis_tam_float[id] + 2.0000001;
ale nadal szukam odpowiedzi dlaczego się tak dzieje.
Edited by funfel, 07.05.2011 19:16.
Quote

  • +
  • -
R3X's Photo R3X 07.05.2011

musisz się liczyć z niedokładnością float, zwłaszcza na 32 bitach, liczb nawet między 0 a 1 jest nieskończenie wiele, komputer ma skończoną pamięc; w debugu printuj zawsze przynajmniej 3,4 miejsca po przecinku (%.3f) a porównywanie floatów rób przez wartość bezwzględną różnicy < np. od 0.0001
Quote

mierzwi's Photo mierzwi 07.05.2011

właśnie oto chodzi że chcę %.1f czyli 1 miejsce

i tak patrze po kilku dodaniach i odejmowaniach dalej wychodzą czasem liczby x.4 :D

dobra możesz zamknąć to panie r3x, dzięki że powiedziałeś czemu tak się dzieje, jakoś sobie poradzę.
Edited by funfel, 07.05.2011 19:57.
Quote

  • +
  • -
R3X's Photo R3X 07.05.2011

zawsze możesz zrobić tak:

"%.1f", zmienna+0.001
Quote

mierzwi's Photo mierzwi 07.05.2011

zrobiłem zapis na %.5f i jak dodaję lub odejmuję to - 1.00001 lub +0.50001 :D
Edited by funfel, 07.05.2011 21:18.
Quote
Locked