Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages
Started by robi
Sat, 09 Jan 2010 13:21
float
Author: robi
Date: Sat, 09 Jan 2010 13:21
Date: Sat, 09 Jan 2010 13:21
8 lines
927 bytes
927 bytes
Witam, Jaki może być problem z dodawaniem dwóch liczb flota x=8,1 y=0,8 suma=8,9000001 Dlaczego nie otrzymuje suma=8,9 ? pozdrawiam Robi
Re: float
Author: Grzegorz Skoczylas
Date: Sat, 09 Jan 2010 15:02
Date: Sat, 09 Jan 2010 15:02
24 lines
1915 bytes
1915 bytes
W dniu 2010-01-09 14:21, robi pisze: > Witam, > Jaki może być problem z dodawaniem dwóch liczb flota x=8,1 y=0,8 > suma=8,9000001 > Dlaczego nie otrzymuje suma=8,9 ? Bo w przypadku liczb rzeczywistych komputer z reguły wykonuje działania na liczbach przybliżonych, więc i wynik jest przybliżony. Poza tym komputer posługuje się systemem dwójkowym. Niektóre liczby dziesiętne po zapisaniu ich w systemie dwójkowym mają końcówki będące ułamkami okresowymi. W takiej sytuacji wynik jest tym bardziej przybliżony. W przypadku liczb rzeczywistych używanych w komputerze możesz co najwyżej stwierdzić, że dwie liczby są równe sobie z dokładnością do N cyfr dziesiętnych. W podanym przez ciebie przypadku wynik jest poprawny z dokładnością do sześciu cyfr dziesiętnych. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Re: float
Author: robi
Date: Sat, 09 Jan 2010 18:56
Date: Sat, 09 Jan 2010 18:56
37 lines
2406 bytes
2406 bytes
Dzięki za wyjaśnienie . Tylko tego problemu nie ma w przypadku typu decimal ,double Wiec zastanawiam się kiedy używać decimal , a kiedy float lub double. A może przy obliczeniach określić stałą precyzje(Math.Round) . W moim przypadku potrzebuje dokładności do trzech miejsc po przecinku dlatego zdecydowałem się na float. -- Pozdrawiam, robi Użytkownik "Grzegorz Skoczylas" <gskoczylas@kasuj-to.rekord.pl> napisał w wiadomości grup dyskusyjnych:hia5ri$ugi$1@news.dialog.net.pl... > W dniu 2010-01-09 14:21, robi pisze: >> Witam, >> Jaki może być problem z dodawaniem dwóch liczb flota x=8,1 y=0,8 >> suma=8,9000001 >> Dlaczego nie otrzymuje suma=8,9 ? > > Bo w przypadku liczb rzeczywistych komputer z reguły wykonuje działania na > liczbach przybliżonych, więc i wynik jest przybliżony. > > Poza tym komputer posługuje się systemem dwójkowym. Niektóre liczby > dziesiętne po zapisaniu ich w systemie dwójkowym mają końcówki będące > ułamkami okresowymi. W takiej sytuacji wynik jest tym bardziej > przybliżony. > > W przypadku liczb rzeczywistych używanych w komputerze możesz co najwyżej > stwierdzić, że dwie liczby są równe sobie z dokładnością do N cyfr > dziesiętnych. W podanym przez ciebie przypadku wynik jest poprawny z > dokładnością do sześciu cyfr dziesiętnych. > > -- > Pozdrawiam, > > Grzegorz Skoczylas > http://gskoczylas.rekord.pl > ----------------------------------------------
Re: float
Author: Daniel Stalica
Date: Sun, 10 Jan 2010 12:30
Date: Sun, 10 Jan 2010 12:30
15 lines
1215 bytes
1215 bytes
W dniu 2010-01-09 14:21, robi pisze: > Witam, > Jaki może być problem z dodawaniem dwóch liczb flota x=8,1 y=0,8 > suma=8,9000001 > Dlaczego nie otrzymuje suma=8,9 ? > > pozdrawiam > Robi > daj round z jednym miejscem po przecinku na wynik i po problemie :) Ewentualnie licz na liczbach całkowitych 81+8 :) -- Systemy kominowe http://twojkomin.pl
Re: float
Author: Tomasz Muszyński
Date: Sun, 10 Jan 2010 21:59
Date: Sun, 10 Jan 2010 21:59
21 lines
1949 bytes
1949 bytes
W dniu 10-01-09 19:56, robi pisze: > Dzięki za wyjaśnienie . Tylko tego problemu nie ma w przypadku typu > decimal ,double > Wiec zastanawiam się kiedy używać decimal , a kiedy float lub double. > A może przy obliczeniach określić stałą precyzje(Math.Round) . W moim > przypadku potrzebuje > dokładności do trzech miejsc po przecinku dlatego zdecydowałem się na > float. Decimal wykorzystujesz np do obliczeń na kwotach - np stan konta bankowego nie może być podatny na błędy jakie ma float. W przypadku typu Double, błąd zapewne nie wyszedł, ponieważ ma on większa precyzję, ale przy którymś miejscu po przecinku i tak on wyjdzie. Jeżeli więc dokonujesz obliczeń matematycznych, gdzie N-te miejsce po przecinku nie ma znaczenia to używasz float i double. Dla obliczeń dla na kwotach - decimal. Oczywiście Math.Round() też pomaga. tm
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads