Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

dodawanie do float


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 07.05.2011 18:47

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.

Użytkownik funfel edytował ten post 07.05.2011 19:16

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.05.2011 19:52

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
  • +
  • -
  • 0

#3 mierzwi

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 07.05.2011 19:54

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ę.

Użytkownik funfel edytował ten post 07.05.2011 19:57

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.05.2011 20:24

zawsze możesz zrobić tak:

"%.1f", zmienna+0.001

  • +
  • -
  • 0

#5 mierzwi

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 07.05.2011 21:18

zrobiłem zapis na %.5f i jak dodaję lub odejmuję to - 1.00001 lub +0.50001 :D

Użytkownik funfel edytował ten post 07.05.2011 21:18

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych