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? :)
|
|
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; |
|
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 ? |
|
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? |
|
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 :)
|
|
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? |
|
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? |
|
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. |
|
« 1 » 2 |