Porównywanie liczb, double float

formatting link
Genialnie "wchodzą" w FPGA i inny sprzęt, w software nieco słabiej. Pół świata na tym stoi, na 100% masz np. w telefonie.

Pozdrawiam, Piotr

Reply to
Piotr Wyderski
Loading thread data ...

No ale liczby dziesietne ludzie uzywaja nagminnie, a liczb binarnych zmiennoprzecinkowych ... to nawet programisci nie uzywaja :-)

Zdarzylo Ci sie kiedys okreslic, ze to by bylo dobrze przemnozyc przez

11.01101 ?

Nie ja.

J.

Reply to
J.F.

Bez znaczenia - problem ciagle ten sam.

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

Nie, ale czesto ulatwia.

A kto zgarnial "cwierccentowki Dextera" ? :-)

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 "

J.

Reply to
J.F.

Dobre :)

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ą.

Ciekawostka - GnuCash z tego powodu wiele lat temu zrezygnował z float na rzecz stałego przecinka:

formatting link
Mateusz

Reply to
Mateusz Viste

Nowi jak nowi, ale żeby wojsko... I niestety były ofiary.

formatting link

KLoSS

Reply to
KLoSS

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

A co ma koprocesor tutaj do rzeczy?

Reply to
Pszemol

W dniu 2019-06-12 o 17:27, J.F. pisze:

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.

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ć. 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.

P.

Reply to
Piotrne

Tymczasem akcje Ursusa stoją po 0.797 zł. :)

Mateusz

Reply to
Mateusz Viste

Pan Mateusz Viste napisał:

Zdaje się, że na słowackich stacjach benzynowych ceny paliwa podawane są z taką dokładnością (w euro).

Reply to
invalid unparseable

We Francji także, i ten przykład pierwszy przyszedł mi do głowy, ale uznałem go za chybiony - wszak Piotrne specyficznie pisał o atomizmie grosza, a nie centa.

Mateusz

Reply to
Mateusz Viste

Pan Mateusz Viste napisał:

Ponadto w przypadku paliw, niejako z definicji, mamy do czynienia ze zmienną typu float.

Reply to
invalid unparseable

W dniu 2019-06-20 o 14:16, Piotrne pisze:

Masz teoretycznie rację ale to jakiego typu zmiennej używasz zależy od języka, np w takim Cliperze 5.3 w którym w latach 90 popełniłem kilka programów liczących pieniądze jest zmienna INT ale w praniu wyszło że jest ona typu float :( i z problemem opisanym przez Przemol-a musiałem się wtedy już zmierzyć, dodawałem tysięczne części grosza na końcu przed samym porównaniem.

Reply to
Janusz

W dniu 2019-06-20 o 14:38, Mateusz Viste pisze:

formatting link
Warszawa, 25.02.2019 (ISBnews) - Giełda Papierów Wartościowych (GPW) w Warszawie zmienia kroki notowania dla akcji, funduszy typu ETF, kontraktów terminowych na akcje i kursy waluty od 4 marca

2019 r. Kursy tych instrumentów będą określane z dokładnością do czterech miejsc po przecinku (0,0001 zł), podała Giełda

...czyli jednostką jest tutaj 1/100 grosza.

Czasem praktyczne jest pamiętanie liczb zmiennoprzecinkowych jako ułamków - oddzielnie licznika i mianownika (typu całkowitego). Tak robi np. VirtualDub (do przetwarzania filmów) przy zapamiętywaniu parametrów strumienia video.

P.

Reply to
Piotrne

W dniu 2019-06-20 o 20:39, Janusz pisze:

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).

P.

Reply to
Piotrne

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

J.

Reply to
J.F.

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

Reply to
AK

Dokładnie tak ;)

AK

Reply to
AK

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

AK

Reply to
AK

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

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

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

Jamci... :)

Zgoda, jeno cus mi sie wydaje ze to dosc mlody osesek psioczyl na ten Fortran ;)

AK

Reply to
AK

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

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

AK

Reply to
AK

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.