ďťż
 
=?iso-8859-2?Q?Dok=B3adno=B6=E6_MySQL-a?= ďťż
 
=?iso-8859-2?Q?Dok=B3adno=B6=E6_MySQL-a?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

=?iso-8859-2?Q?Dok=B3adno=B6=E6_MySQL-a?=



totyl - 21-05-2006 00:23
=?iso-8859-2?Q?Dok=B3adno=B6=E6_MySQL-a?=
  Popatrzcie na ten przykład:

mysql> select * from blah;
+-----------------------------------+
| value |
+-----------------------------------+
| 10.00000000000000000000000000000 |
| 10.00000000000000000000000000000 |
| 10.00000000000000000000000000000 |
| -40.00000000000000000000000000000 |
| 10.00155900000000000000000000000 |
+-----------------------------------+
5 rows in set (0.00 sec)

mysql> select sum(value) from blah;
+---------------------------------+
| sum(value) |
+---------------------------------+
| 0.00155900000000031013769330457 |
+---------------------------------+
1 row in set (0.00 sec)

mysql> show columns from blah;
+-------------+----------------+------+-----+---------------------------------+----------------+
| Field | Type | Null | Key | Default
| Extra |
+-------------+----------------+------+-----+---------------------------------+----------------+
| value | decimal(32,29) | | |
0.00000000000000000000000000000 | |
+-------------+----------------+------+-----+---------------------------------+----------------+
1 rows in set (0.00 sec)

mysql>

Skąd ta dziwna wartość sum(value)??? Czy nie może być prawidłowo? Przecież
to tylko sumowanie!
O czym nie wiem? :)

Pozdrówko

totyl





Xneme - 22-05-2006 00:01

  totyl napisał(a):
> Popatrzcie na ten przykład:
>
> mysql> select * from blah;
> +-----------------------------------+
> | value |
> +-----------------------------------+
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | -40.00000000000000000000000000000 |
> | 10.00155900000000000000000000000 |
> +-----------------------------------+
> 5 rows in set (0.00 sec)
>
> mysql> select sum(value) from blah;
> +---------------------------------+
> | sum(value) |
> +---------------------------------+
> | 0.00155900000000031013769330457 |
> +---------------------------------+
> 1 row in set (0.00 sec)
>
> mysql> show columns from blah;
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | Field | Type | Null | Key | Default | Extra |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | value | decimal(32,29) | | |
> 0.00000000000000000000000000000 | |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> 1 rows in set (0.00 sec)
>
> mysql>
>
> Skąd ta dziwna wartość sum(value)??? Czy nie może być prawidłowo?
> Przecież to tylko sumowanie!
> O czym nie wiem? :)
>
> Pozdrówko
>
> totyl
moze zglosc to do developwerow mysql :), ale cos mi swita czemu tak jest
ale jak mi zaswita to ci napisze bo teraz jakos nei moge sobie
przypomniec :)




Xneme - 22-05-2006 00:01

  totyl napisał(a):
> Popatrzcie na ten przykład:
>
> mysql> select * from blah;
> +-----------------------------------+
> | value |
> +-----------------------------------+
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | -40.00000000000000000000000000000 |
> | 10.00155900000000000000000000000 |
> +-----------------------------------+
> 5 rows in set (0.00 sec)
>
> mysql> select sum(value) from blah;
> +---------------------------------+
> | sum(value) |
> +---------------------------------+
> | 0.00155900000000031013769330457 |
> +---------------------------------+
> 1 row in set (0.00 sec)
>
> mysql> show columns from blah;
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | Field | Type | Null | Key | Default | Extra |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | value | decimal(32,29) | | |
> 0.00000000000000000000000000000 | |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> 1 rows in set (0.00 sec)
>
> mysql>
>
> Skąd ta dziwna wartość sum(value)??? Czy nie może być prawidłowo?
> Przecież to tylko sumowanie!
> O czym nie wiem? :)
>
> Pozdrówko
>
> totyl

u mnie wynik tego sdumowania jest ten sam 0.00155900000000031013769330457

cos mi sie zdaje ze kiedys na programowaniu w C byla mowa o takich
przypadkach ale nie moge sobie przypomniec




eLeM - 22-05-2006 00:02

  totyl napisał(a):
> Popatrzcie na ten przykład:
>
> mysql> select * from blah;
> +-----------------------------------+
> | value |
> +-----------------------------------+
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | -40.00000000000000000000000000000 |
> | 10.00155900000000000000000000000 |
> +-----------------------------------+
> 5 rows in set (0.00 sec)
>
> mysql> select sum(value) from blah;
> +---------------------------------+
> | sum(value) |
> +---------------------------------+
> | 0.00155900000000031013769330457 |
> +---------------------------------+
> 1 row in set (0.00 sec)
>
> mysql> show columns from blah;
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | Field | Type | Null | Key | Default | Extra |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> | value | decimal(32,29) | | |
> 0.00000000000000000000000000000 | |
> +-------------+----------------+------+-----+---------------------------------+----------------+
>
> 1 rows in set (0.00 sec)
>
> mysql>
>
> Skąd ta dziwna wartość sum(value)??? Czy nie może być prawidłowo?
> Przecież to tylko sumowanie!
> O czym nie wiem? :)
>
> Pozdrówko
>
> totyl
--------------------------------------------------------------------------

Jeśli się nie myle to (a może się myle - głowy nie dam) to chodzi o
problem z operacjami na liczbach miennoprzecinkowych. Przy dużych
liczbach jest problem z poprawnością obliczeń takich liczb gdyż na
którymś tam miejscu po przecinku następują błędne obliczenia.

Pozdrawiam,
eLeM





Kocureq - 22-05-2006 00:02

  eLeM napisał(a):
> Jeśli się nie myle to (a może się myle - głowy nie dam) to chodzi o
> problem z operacjami na liczbach miennoprzecinkowych. Przy dużych
> liczbach jest problem z poprawnością obliczeń takich liczb gdyż na
> którymś tam miejscu po przecinku następują błędne obliczenia.
Ale tu jest suma, cos nie tak.

Ten blad wystepuje np. wtedy:

10*0.1-1

Ale to wynika z tego ze 0.1 jest ulamkiem nieskonczonym w zapisie binarnym

A tutaj jesli raz ta liczba jest wyswietlana w dany sposob (czyli jest
konwertowana z zapisu binarnego na dziesietny)

10.00155900000000000000000000000

i przeciez po sumowaniu nic sie w niej nie powinno zmienic, bo operacje
sumowania sa dokonywane na czesciach calkowitych pzoostalych liczb,
ktore to juz sa skionczone. ergo czesc ulamkowa tej liczby nie powinna
sie zmienic w zapisie binarnym.

--
/\ /\ [ Jakub 'Kocureq' Anderwald ] /\ /\
=^;^= [ [nick][at][nick].com ] =^;^=
/ | [ GG# 1365999 ICQ# 31547220 ] | \
(___(|_|_| [ kocureq@jabber.org ] |_|_|)___)




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 22-05-2006 00:02

  Kocureq wrote:
> eLeM napisał(a):
>
>> Jeśli się nie myle to (a może się myle - głowy nie dam) to chodzi o
>> problem z operacjami na liczbach miennoprzecinkowych. Przy dużych
>> liczbach jest problem z poprawnością obliczeń takich liczb gdyż na
>> którymś tam miejscu po przecinku następują błędne obliczenia.
>
> Ale tu jest suma, cos nie tak.
>
> Ten blad wystepuje np. wtedy:
>
> 10*0.1-1
>
> Ale to wynika z tego ze 0.1 jest ulamkiem nieskonczonym w zapisie binarnym

Prawda, ale co z tego?

> A tutaj jesli raz ta liczba jest wyswietlana w dany sposob (czyli jest
> konwertowana z zapisu binarnego na dziesietny)
>
> 10.00155900000000000000000000000
>
> i przeciez po sumowaniu nic sie w niej nie powinno zmienic, bo operacje
> sumowania sa dokonywane na czesciach calkowitych pzoostalych liczb,
> ktore to juz sa skionczone. ergo czesc ulamkowa tej liczby nie powinna
> sie zmienic w zapisie binarnym.

Ale zmyślasz....

mysql> select 10.01590000000000000000;
+-------------------------+
| 10.01590000000000000000 |
+-------------------------+
| 10.01590000000000024727 |
+-------------------------+

Krótko mówiąc, 10.0159 nie da się dokładnie zapisać w binarnej
reprezentacji liczby zmiennoprzecinkowej, więc jeśli będziemy wymagać
większej dokładności wyjdzie szydło z worka.

A dlaczego mówimy o liczbach zmiennoprzecinkowych? Wystarczy przeczytać
cały akapit z dokumentacji, w takim zaskakującym dla niektórych miejscu,
jak opis typu DECIMAL. I tam wyraźnie pisze, że chociaż jest to typ
stałoprzecinkowy, ma dokładność typu DOUBLE. I zapewne o to pytającemu
chodzi.

--
P.M.




Kocureq - 22-05-2006 00:02

  Paweł Matejski napisał(a):
> Ale zmyślasz....
> mysql> select 10.01590000000000000000;
> +-------------------------+
> | 10.01590000000000000000 |
> +-------------------------+
> | 10.01590000000000024727 |
> +-------------------------+

A, to ok :)

Skoro dokladny zapis binarny liczby dziesiętnej 10.01590000000000000000
wynosi 10.01590000000000024727 to moze byc.

Tylko dlaczego tutaj:

mysql> select * from blah;
+-----------------------------------+
| value |
+-----------------------------------+
| 10.00000000000000000000000000000 |
| 10.00000000000000000000000000000 |
| 10.00000000000000000000000000000 |
| -40.00000000000000000000000000000 |
| 10.00155900000000000000000000000 |
+-----------------------------------+

wyswietlana jest liczba tak, jakby siedziala dokladnie w takiej postaci
jak w dziesietnej?

--
/\ /\ [ Jakub 'Kocureq' Anderwald ] /\ /\
=^;^= [ [nick][at][nick].com ] =^;^=
/ | [ GG# 1365999 ICQ# 31547220 ] | \
(___(|_|_| [ kocureq@jabber.org ] |_|_|)___)




ethanak - 23-05-2006 00:24

  Kocureq napisał(a):
[...]
> Tylko dlaczego tutaj:
>
> mysql> select * from blah;
> +-----------------------------------+
> | value |
> +-----------------------------------+
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | 10.00000000000000000000000000000 |
> | -40.00000000000000000000000000000 |
> | 10.00155900000000000000000000000 |
> +-----------------------------------+
>
> wyswietlana jest liczba tak, jakby siedziala dokladnie w takiej postaci
> jak w dziesietnej?
>
A nie jest tak, że ta liczba jest zapisana w bazie jako decimal z
odpowiednią dokładnością a dopiero jakiekolwiek operacje arytmetyczne
przekształcają ją na double? SELECT raczej nie jest operacją arytmetyczną...

ethanak
--
mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20=');
/* Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
S. Friedmann/J. Kofta */
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Gdzie MySQL 4.1, a gdzie 5.0? [MS SQL] "set names" (mySQL) w MS SQL oracle -> oracle lub oracle -> mysql replikacja - programy [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. [MySQL] Zwrot tego, co pasuje i nie pasuje :-/ [pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1 [mysql] galeria zdjec - numerowanie zdjec [MySQL] Zapytanie z pliku , wynik do pliku [mysql] CONCAT agregujący, ale nie GROUP_CONCAT() mysql data 0000-00-00 na koniec
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com