Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tablica liczb (float)

Ostatnio zmodyfikowano 2013-11-23 23:01
Autor Wiadomość
henk
Temat założony przez niniejszego użytkownika
tablica liczb (float)
» 2013-11-23 20:21:45
Witam,

moze ktos pomoze poczatkujacemu, stworzylem sobie tablice ilus tam elementow typu float i wprowadzilem do niej liczby ,np.:

float tab[4] = {1,0.5, 0.2, 0.1}

Zaczalem wykonywac operacje na tych liczbach, cos mi nie wychodzilo, sprawdzilem debuggerem i okazalo sie ,ze te liczby nie sa rowne tzn.:

0.5 - jest ok, ale np. 0.2 to nie 0.2 lecz 0.200000003, 0.1 to 0.100000001.

Z tego co sie orientuje instrukcja precision dot. tylko ilosci wyswietlanych cyfr po przecniku a mi zalezy zeby miec rowne 0.20, 0.10 itd.

Ktos moze mnie oswiecic? :)

P-97201
Mitu
» 2013-11-23 20:23:52
Float jest zapisany jako potęga pewnej liczby. Niektóre liczby nie są możliwe do uzyskania, więc pojawia się ich przybliżenie. Wystarczy wyświetlać je do któregoś miejsca po przecinku i będzie dobrze.

Jakbyś chciał poznać szczegóły;
P-97202
henk
Temat założony przez niniejszego użytkownika
» 2013-11-23 20:26:34
Czyli jesli ustawie za pomoca precision 2 miejsca po przecinku to bedzie mi ta liczbe tez traktowalo w obliczeniach jako 0.20 a nie 0.200000003 ?
P-97204
Mitu
» 2013-11-23 20:34:27
Nie, precision dotyczy tylko wyświetlania.

Jesteś pewien, że winne są te końcówki? Może gdzieś robisz konwersję albo to błąd gdzieś w programie?
P-97207
henk
Temat założony przez niniejszego użytkownika
» 2013-11-23 20:46:59
Zrobilem sobie takie losowanie z zakresu liczb 0.1 - 0.99

float ile = rand() % 99 + 1 ;
ile /= 100 ;

Moze tutaj jest gdzies blad? Jak w takim razie zrobic aby w dzialanich matematycznych operowac na 2 miejscach po przecinku? Widze w debuggerze ,ze kompilator caly czas traktuje mi te wartosci jak dlugie liczby i po odjeciu liczb (wynik powinienie byc rowny 0) dostaje liczbe z mala koncowka, np. 0.099994.
Pogubilem sie w tym :)
P-97209
Monika90
» 2013-11-23 20:54:52
Jak w takim razie zrobic aby w dzialanich matematycznych operowac na 2 miejscach po przecinku?
Może używać liczb całkowitych pomnożonych przez 100, a przy wyświetlaniu wyniku wstawić przecinek pomiędzy drugą i trzecią cyfrę od końca?
P-97210
henk
Temat założony przez niniejszego użytkownika
» 2013-11-23 21:01:36
Monika - sprytne rozwiazanie, a jak mozna to zrobic jesli chcialbym operowac jednak na liczba po przecinku?
P-97212
Mitu
» 2013-11-23 22:35:44
W C++ się nie da, zmiennoprzecinkowe float i double mają już to do siebie, że będą się pojawiać takie końcówki. W Javie jest do tego typ BigDecimal. Możesz sobie jako ćwiczenie napisać swoją klasę, która będzie przyjmować liczby z przecinkiem jako string i operować na nich w środku jak na przemnożonych intach.
P-97224
« 1 » 2
  Strona 1 z 2 Następna strona