RTV forum PL | NewsGroups PL

Precyzja liczb zmiennoprzecinkowych w VB6 - dlaczego wynik 31 nie równa się 31?

Porównywanie liczb, double float

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Precyzja liczb zmiennoprzecinkowych w VB6 - dlaczego wynik 31 nie równa się 31?

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

AK
Guest

Tue Jun 25, 2019 7:25 pm   



On 2019-06-18 17:20, Mateusz Viste wrote:
Quote:
Wszystko zaczęło się od twojego stwierdzenia, że do skorzystania z float
trzeba skończyć "półroczny zaawansowany wykład z analizy numerycznej".
Otóż staram się> wyjaśnić że nie, bo do tego wystarczy być średnio rozgarniętym
człowiekiem i poświęcić jeden wieczór na zrozumienie (na podstawie ogólno-
dostępnej dokumentacji) czym jest float, jak działa i dlaczego to nie
jest żadne uniwersalne narzędzie. No powiedzmy dwa wieczory, jeśli
wliczyć w to zabawę z kompilatorem i sprawdzenia jak taki float reaguje w
praktyce i w jaki sposób jest przechowywany w pamięci. Ok, niech będą 3
wieczory, żeby jeszcze zerknąć do kilku projektów OSS jak oni korzystają
(lub nie) z float, i dlaczego.

Powyzsze podejscie _kompletnie_ dyskwalifikuje Cie jako uzytkownika
liczb float. Ba! Dyskwalifikuje Cie jako programistę.
(niewazne czy samouka czy nie).
PS: Zapsz si ejednak na ten kurs numeryki. Moze jeszcze gdzies ucza o
float...

AK

AK
Guest

Tue Jun 25, 2019 7:27 pm   



On 2019-06-18 17:54, Roman Tyczka wrote:
Quote:
Bo on mówi o zaawansowanej algorytmice, numeryce i matematyce, a Ty o
rzeżbieniu w strumieniu danych, alokowaniu pamięci, ramkach, buforach i
całym tym nieistotnym, niskopoziomowym, implementacyjnym pierdulamencie.

Dokładnie tak ;)

AK

AK
Guest

Tue Jun 25, 2019 7:37 pm   



On 2019-06-19 11:35, J.F. wrote:
Quote:
A te (a byly/sa takie) ktore uzywaja wewnetrznie systemu dziesietnego
maja rownie powazne problemy z danymi binarnymi.
Zaden argument.

No ale liczby dziesietne ludzie uzywaja nagminnie

I co z tego?
"Problemy" z liczbami fp kompletnie nie zaleza od ich podstawy.

AK

AK
Guest

Tue Jun 25, 2019 7:48 pm   



On 2019-06-19 11:45, J.F. wrote:
Quote:
Użytkownik "AK"  napisał w wiadomości grup
dyskusyjnych:qeckl4$1nvk$1@gioia.aioe.org...
On 2019-06-17 16:09, J.F. wrote:
Dzisiejsze koprocesory ciagle maja ten sam format liczby double,
ktory powoduje te błędy.

Taaa? A zauwazyl Ty ze "przy okazji" posiadaja jeden z formatow dluzszy
niz najdluzszy int (czyli 80bit)?
Czyli moze liczyc w wiekszym zakresie :)

Bez znaczenia - problem ciagle ten sam.

Nie. Obliczenia posrednie (wewnetrznie robione na np 80 bitach)
sa dokladniejsze, wiec koncowy wynik tez (lepiej/dokladniej
obcinany/zaokraglany)

Quote:
Nawiasem mowiac - czy mi sie wydaje, czy ten format 80-bit jest po
cichutku wycofywany ?

A nie wiem. I.. chce nie wiedziec.
Ba! Wlasnie umiejetnosc poslugiwania sie fp polega na..
"nicniewiedzeniu" o ich faktycznej reprezentacji.

Quote:
Wczorajsze koprocesory mialy formaty BCD, ktore akurat pieniadze
liczyly dokladnie, czy dzisiejsze maja to juz nie wiem.

Kolejny mit, ze BD jest "zbawieniem na cale zlo".

Nie, ale czesto ulatwia.

Tak, ale w przypadku "surowych" dziesietnych czyli nie bedacych
wynikiem/uczestniczacych w obliczeniach. A ilez takich?
Nawet w bankowosci dosc malo.

Quote:
PS: "My" akurat w defBank-u stosowalismy zwykle double i jakos Assecco
sie z tego powodu do dzis nie przekrecilo :)

A kto zgarnial "cwierccentowki Dextera" ? Smile

Jamci... :)

Quote:
Ze wspomnien starszego informatyka ... bankowego.
"Fortran, co to za g* jest.  Klient ma na koncie 25.60, przychodzi  mu
74.40,
i na koncie ma 99.999996
Przeszlismy na podwojna precyzje. To teraz ma
99.999999999954
"
Zgoda, jeno cus mi sie wydaje ze to dosc mlody osesek psioczyl na ten

Fortran ;)

AK

AK
Guest

Tue Jun 25, 2019 7:51 pm   



On 2019-06-19 13:40, Mateusz Viste wrote:

Quote:
A na problem - mimo że powszechnie znany - jednak ciągle nadziewają się
nowi. Dziwne, że w banku (wydawałoby się, poważnej instytucji) w to
wpadają.

Ci co sie znaja (starzy) to sie _nie nadziewaja_.
Nadziewaja sie nieodmiennie dzisiejsi MWzDM :(

Quote:
Ciekawostka - GnuCash z tego powodu wiele lat temu zrezygnował z float na
rzecz stałego przecinka: http://www.gnucash.org/docs/v1.6/C/t7204.html

A co mi k... z roznica? Smile
Jak juz to wazniejsza jest dlugosc mantysy.

AK

AK
Guest

Tue Jun 25, 2019 7:53 pm   



On 2019-06-19 21:51, KLoSS wrote:
Quote:
Nowi jak nowi, ale żeby wojsko... I niestety były ofiary.

http://www-users.math.umn.edu/~arnold//disasters/patriot.html

O ja pie.. To niemozliwe (urban legend?).
Przecie to zakrawa na zwykłe nieuctwo :(

AK

AK
Guest

Tue Jun 25, 2019 7:58 pm   



On 2019-06-20 02:52, Pszemol wrote:
Quote:
1. ile masz takich przypadkow w zyciu (owszem, fraktale).

W konkretnych zastosowaniach przemysłowych? Embedded?
Bardzo dużo.

I tam. FP w dzisiejszych embeded prockach i kompierach tez sa
juz dostepne i moga byc uzywane.

Quote:
2. przy dzisiejszych koprocesorach ? Na pewno warto ?
/Kiedys zdecydowanie tak, wiec absolutnie podejscia nie potępiam/.

A co ma koprocesor tutaj do rzeczy?

A to ze dzisiaj koprocesor moze szybciej policzyc floaty niz procesor
inty.

AK

AK
Guest

Tue Jun 25, 2019 8:03 pm   



On 2019-06-20 14:16, Piotrne wrote:
Quote:
W dniu 2019-06-12 o 17:27, J.F. pisze:

Weź chłopie ić na studia (ja miałem to nawet na wieczorowych 20 lat temu) i się doucz! Zamiast
zadawać głupie pytania. Choć gdybyś dłubał w czymś innym niż VB to byś wiedział o problemie (w
każdej książce do Asemblera czy C czy C++ to powinno być).

Musialbym sobie przypomniec ... ale przy okazji Assemblera raczej nikt nie poruszal takiego watku.
Przy C predzej, ale to gdzies na pograniczu.

Na studiach jest (powinien być?) cały przedmiot o nazwie "Arytmetyka maszyn cyfrowych",
gdzie na kilkudziesięciu godzinach wykładów można dokładnie dowiedzieć się, jak są
pamiętane liczby całkowite ze znakiem, bez znaku, zmiennoprzecinkowe, dlaczego i kiedy
występują błędy zaokrągleń itp. Można też dowiedzieć się, że warunek
"jeśli a jest równe b" przy rzeczywistych typach a, b to proszenie się o kłopoty.

Swieta racja.

Quote:
Problemy nie zależą od języka programowania. Ułamka dziesiętnego 0.8 nie da się
w przyjętym sposobie zapisu liczb zmiennoprzecinkowych zapisać dokładnie - w układzie
dwójkowym jest to ułamek okresowy, ma nieskończenie wiele znaczących cyfr.
Nie można ich wszystkich pamiętać.

J/w.

Quote:
Oczywistym rozwiązaniem pozwalającym uniknąć
błędów jest używanie tylko liczb całkowitych. Np. jeśli ma to być jakaś
kwota pieniędzy, należy liczyć w groszach (zawsze całkowitych), a nie złotówkach
i ułamkach złotego.

Nie, gdyz policzenie nawet zwyklej sredniej moze sie okazac problemem.
Moze sie okazac ze obliczenie jej na dwojkowych floatach jest blizsze
rzeczywistosci niz na groszach, bcd czy czymkolwiek innym.

AK

AK
Guest

Tue Jun 25, 2019 8:07 pm   



On 2019-06-22 14:47, Piotrne wrote:
Quote:
W dniu 2019-06-20 o 20:39, Janusz pisze:

Masz teoretycznie rację ale to jakiego typu zmiennej używasz zależy od języka

Można jeszcze użyć typu decimal (np. w C#), który pamięta liczby
w układzie dziesiętnym i nie ma problemów z zaokrągleniami
liczby 0.1. Obliczenia są znacznie wolniejsze niż dla double
(są realizowane programowo, a nie sprzętowo).

i moga dawac gorsze wyniki od obiczen na floatach
(w dodatku dajac ułudę pewnosci:).

AK

AK
Guest

Tue Jun 25, 2019 8:09 pm   



On 2019-06-23 14:57, J.F. wrote:
Quote:
Tymczasem akcje Ursusa stoją po 0.797 zł. :)

Ciekawe, czy pamietaja na float, double, czy na int w 0.1gr Smile

Nie ma znaczenie jak sa pamietane.
Wazne ja sa prezentowane (i porownywane).

AK

J.F.
Guest

Wed Jun 26, 2019 4:10 am   



Dnia Tue, 25 Jun 2019 21:48:04 +0200, AK napisał(a):
Quote:
On 2019-06-19 11:45, J.F. wrote:
Użytkownik "AK"  napisał w wiadomości grup
On 2019-06-17 16:09, J.F. wrote:
Dzisiejsze koprocesory ciagle maja ten sam format liczby double,
ktory powoduje te błędy.

Taaa? A zauwazyl Ty ze "przy okazji" posiadaja jeden z formatow dluzszy
niz najdluzszy int (czyli 80bit)?
Czyli moze liczyc w wiekszym zakresie :)

Bez znaczenia - problem ciagle ten sam.

Nie. Obliczenia posrednie (wewnetrznie robione na np 80 bitach)
sa dokladniejsze, wiec koncowy wynik tez (lepiej/dokladniej
obcinany/zaokraglany)

Ale nadal 31.8 nie da sie zapisac dokladnie.

Quote:
Nawiasem mowiac - czy mi sie wydaje, czy ten format 80-bit jest po
cichutku wycofywany ?

A nie wiem. I.. chce nie wiedziec.
Ba! Wlasnie umiejetnosc poslugiwania sie fp polega na..
"nicniewiedzeniu" o ich faktycznej reprezentacji.

Ale musisz umiec dobrac EPS :-)

Quote:
Wczorajsze koprocesory mialy formaty BCD, ktore akurat pieniadze
liczyly dokladnie, czy dzisiejsze maja to juz nie wiem.

Kolejny mit, ze BD jest "zbawieniem na cale zlo".

Nie, ale czesto ulatwia.

Tak, ale w przypadku "surowych" dziesietnych czyli nie bedacych
wynikiem/uczestniczacych w obliczeniach. A ilez takich?
Nawet w bankowosci dosc malo.

Wydaje mi sie, ze w bankowosci wiekszosc.

Quote:
Ze wspomnien starszego informatyka ... bankowego.
"Fortran, co to za g* jest.  Klient ma na koncie 25.60, przychodzi  mu
74.40,
i na koncie ma 99.999996
Przeszlismy na podwojna precyzje. To teraz ma
99.999999999954
"
Zgoda, jeno cus mi sie wydaje ze to dosc mlody osesek psioczyl na ten
Fortran Wink

Albo doswiadczony :-)

Akurat patrze na program magazynowy - ma dwie jednostki.
Moze np farbe liczyc w litrach, albo w puszkach.
Jak puszka ma 3 litry to sie dzieja cuda.

J.

J.F.
Guest

Wed Jun 26, 2019 4:11 am   



Dnia Tue, 25 Jun 2019 22:09:22 +0200, AK napisał(a):
Quote:
On 2019-06-23 14:57, J.F. wrote:
Tymczasem akcje Ursusa stoją po 0.797 zł. :)

Ciekawe, czy pamietaja na float, double, czy na int w 0.1gr :-)

Nie ma znaczenie jak sa pamietane.
Wazne ja sa prezentowane (i porownywane).

Ale byloby istotne w kwestii wyzszosci liczb float nad fixed czy
binary nad bcd :-)

J.

J.F.
Guest

Wed Jun 26, 2019 4:17 am   



Dnia Tue, 25 Jun 2019 21:37:48 +0200, AK napisał(a):
Quote:
On 2019-06-19 11:35, J.F. wrote:
A te (a byly/sa takie) ktore uzywaja wewnetrznie systemu dziesietnego
maja rownie powazne problemy z danymi binarnymi.
Zaden argument.

No ale liczby dziesietne ludzie uzywaja nagminnie

I co z tego?
"Problemy" z liczbami fp kompletnie nie zaleza od ich podstawy.

O tyle zaleza, ze jeden format moze miec problem z liczbami typu
31.8, drugi z 5/16, a oba z 1/3.

No i ktorych liczb uzywasz czesciej?
Od tego bedzie zalezec, ktory format lepszy :-)

J.

J.F.
Guest

Wed Jun 26, 2019 4:21 am   



Dnia Tue, 25 Jun 2019 21:25:30 +0200, AK napisał(a):
Quote:
On 2019-06-18 17:20, Mateusz Viste wrote:
Wszystko zaczęło się od twojego stwierdzenia, że do skorzystania z float
trzeba skończyć "półroczny zaawansowany wykład z analizy numerycznej".
Otóż staram się> wyjaśnić że nie, bo do tego wystarczy być średnio rozgarniętym
człowiekiem i poświęcić jeden wieczór na zrozumienie (na podstawie ogólno-
dostępnej dokumentacji) czym jest float, jak działa i dlaczego to nie
jest żadne uniwersalne narzędzie. No powiedzmy dwa wieczory, jeśli
wliczyć w to zabawę z kompilatorem i sprawdzenia jak taki float reaguje w
praktyce i w jaki sposób jest przechowywany w pamięci. Ok, niech będą 3
wieczory, żeby jeszcze zerknąć do kilku projektów OSS jak oni korzystają
(lub nie) z float, i dlaczego.

Powyzsze podejscie _kompletnie_ dyskwalifikuje Cie jako uzytkownika
liczb float. Ba! Dyskwalifikuje Cie jako programistę.
(niewazne czy samouka czy nie).
PS: Zapsz si ejednak na ten kurs numeryki. Moze jeszcze gdzies ucza o
float...

No ale przeciez nie chcesz wiedziec jak floaty sa zapisane :-P

To po takim kursie bediesz mial metlik - pelno ostrzezen o mozliwych
bledach i zero rozwiazan :-)

J.

J.F.
Guest

Wed Jun 26, 2019 4:38 am   



Dnia Tue, 25 Jun 2019 21:53:54 +0200, AK napisał(a):

Quote:
On 2019-06-19 21:51, KLoSS wrote:
Nowi jak nowi, ale żeby wojsko... I niestety były ofiary.

http://www-users.math.umn.edu/~arnold//disasters/patriot.html

O ja pie.. To niemozliwe (urban legend?).
Przecie to zakrawa na zwykłe nieuctwo Sad


urban legend mozliwe ... ale ...

Z jednej strony nieuctwo, z drugiej - pewien problem, jak to zrobic
dobrze.
A wojsko (klient) pewnie nie zostawialo na 4 dni przed testami
wlaczonego :-)


J.

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Precyzja liczb zmiennoprzecinkowych w VB6 - dlaczego wynik 31 nie równa się 31?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map
Nasz serwis wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt zgodnie z ustawieniami przeglądarki. Informacja o ciasteczkach