![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 29.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam taki kod i nie rozumiem co może być źle, jak znaleźć error (IMG:style_emoticons/default/sciana.gif)
ten if jest wywoływany w pętli while, nie rozumiem dlaczego ale czasem liczby o przecinkowej precyzji wcale nie są wykrywane jako równe (IMG:style_emoticons/default/exclamation.gif) ! Co może być tego przyczyną ? Czy to nie są wartości typu int tylko String np. jak to sprawdzić, co może być źle ? proszę o wskazówki bo naprawdę nie rozumiem |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 1 Dołączył: 12.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie wykrywa i wykrywać nie musi, bo 0.1 to wcale nie taka "okrągła" liczba jak się Tobie wydaje, a 0.01 tym bardziej (IMG:style_emoticons/default/winksmiley.jpg)
Przeczytaj posty powyżej, powinno pomóc w zrozumieniu. Ten post edytował pheter 28.10.2009, 21:34:41 |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nie wykrywa i wykrywać nie musi, bo 0.1 to wcale nie taka "okrągła" liczba jak się Tobie wydaje, a 0.01 tym bardziej (IMG:style_emoticons/default/winksmiley.jpg) To ja może wspomnę, że najlepsze pod względem "okrągłości" liczby w systemach komputerowych są dane łatwo zapisujące się binarnie, przykładowo 0.125 (IMG:style_emoticons/default/smile.gif) Dlaczego? Zapiszcie sobie tę liczbę binarnie to zobaczycie (IMG:style_emoticons/default/winksmiley.jpg) Dla leniwych wyjaśnię, że kolejne liczby po przecinku to coraz wyższe ułamki dwójki. Tak więc binarnie:Przeczytaj posty powyżej, powinno pomóc w zrozumieniu. 0.1(bin) = 2^-1 = 1/2^1 = 1/2 = 0.5(dec) 0.01(bin) = 2^-2 = 1/2^2 = 1/4 = 0.25(dec) 0.001(bin) = 2^-3 = 1/2^3 = 1/8 = 0.125(dec) ...i tak dalej (IMG:style_emoticons/default/smile.gif) Te liczby się dodają bez żadnych przybliżeń i można na nich liczyć bezpiecznie i to do ułamków dwójki są zaokrąglane liczby takie 0.75 to binarnie 0.11, ale już 0.76 to już będzie wariacja 0.110101... i dalej z precyzją lecąc jeszcze ileś zer i jedynek byleby jak najbliżej tego być. To sprawia, że dodając dwie takie liczby nie ma gwarancji dokładności. Są systemy, które to obchodzą i to w nich powinno się zapisywać dane jeśli chcesz mieć gwarancję dokładności. Poczytaj może nieco o BCD to Ci się rozjaśni temat. Inaczej zapisują one dane przez co są naprawdę dokładne, ale niestety kosztem zużywanej pamięci. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 23:58 |