-
21. Data: 2019-06-14 06:35:55
Temat: Re: Porównywanie liczb, double float
Od: JDX <j...@o...pl>
On 2019-06-13 23:22, bartekltg wrote:
[...]
> BTW, long int to raz 32, raz 64 bity. A teoretycznie może mieć i inną wartość;-)
A czasami zwykły int to raz 16, a raz 32 bity. :-) W zależności od
ustawień kompilatora - vide MCU z rodziny H8/300H, H8S i pokrewne.
-
22. Data: 2019-06-14 08:19:16
Temat: Re: Porównywanie liczb, double float
Od: Mateusz Viste <m...@w...tell>
On Thu, 13 Jun 2019 14:22:06 -0700, bartekltg wrote:
> On Thursday, June 13, 2019 at 3:37:52 PM UTC+2, Pszemol wrote:
>> "Mateusz Viste" <m...@n...pamietam> wrote in message
>> news:5d00f035$0$15194$426a74cc@news.free.fr...
>> > On Wed, 12 Jun 2019 07:17:45 -0500, Pszemol wrote:
>> >> Pisząc w Visual Basic 6 gostek porównywał rezultat konwersji CDbl()
>> >> stringu od którego odjął stałą numeryczną 1.8 do lokalnej zmiennej
>> >> double.
>> >
>> > Prawdziwi programiści nie używają liczb zmiennoprzecinkowych.
>
> Pieprzenie. No, czyba, że programowanie = frontend.
>
>> Faktem jest, że gdy zmienne nie skaczą dynamicznie od e-15 do e+15 to
>> warto znaleźć zakres wariacji mierzonej zmiennej, oczekwianą dokładność
>> i zamiast na float operować na long integer * 10000 na przykład...
>
> Co najwyżęj, jak obracasz walutą. Standard to chyba 1/10000 jednostki
> (złotówki, dolara...).
>
> BTW, long int to raz 32, raz 64 bity. A teoretycznie może mieć i inną
> wartość;-)
Prawdziwi programiści zakładają, że typ danych jest najwęższy możliwy:
int=16, long=32, long long=64. A jeśli chcą czegoś konkretnego to znają
stdint.h i potrafią korzystać z uint32_t i jemu podobnych.
Mateusz
-
23. Data: 2019-06-16 21:19:42
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-12 14:44, J.F. wrote:
> Użytkownik "Pszemol" napisał w wiadomości grup
> To nie jest problem VB, to jest problem przyjetego formatu liczb
> rzeczywistych.
I tam. Nieprawda. W _kazdym_ systemie/formacie FP moze sie zdarzyc.
> Albo problem programisty :-)
_Wylacznie_ problem programisty.
> Po prostu nie da sie zapisac 32.8 dokladnie.
> Programista ma o tym wiedziec i sie zabezpieczyc :-)
Prawda!
>> Czy inne Visuale jak VC++ lub VC# też tak mają?
>
> To jest problem procesora z FP IEEEcostam.
Wcale nie. To jest problem jak najbardziej ogolny.
> Akurat .net ma dodatkowe formaty (Decimal), w ktorych powinno to dzialac.
> Tylko trzeba ie
> Ale i tak bym dorzucil zabezpieczenie.
Racja! Sam Decimal tak naprawde przed niczym sam z siebie nie chroni.
> Problem promieniuje na bazy danych, gdzie mamy duzo kwot, a te grosze
> tez nie sa dokladne :-)
Raaacja ! :)
AK
-
24. Data: 2019-06-16 21:21:20
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-12 17:27, J.F. wrote:
> Kto nie uczyl sie Fortranu, ten nie zna zycia :-)
O przepraszam ! Ja sie uczylem Agolu/Simuli!
PS: No dobra.. Fortranu też ;)
AK
-
25. Data: 2019-06-16 21:40:41
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-12 16:54, Cezary Grądys wrote:
> W dniu 12.06.2019 o 14:29, Mateusz Viste pisze:
>
>>
>> Prawdziwi programiści nie używają liczb zmiennoprzecinkowych.
>>
>> Obowiązkowa lektura na wieczór:
>> http://perso.ens-lyon.fr/jean-michel.muller/goldberg
.pdf
>>
>
> Nie ma co przesadzać, liczby zmiennoprzecinkowe po to powstały, żeby je
> używać. Trzeba tylko porównywać je zakładając pewną dopuszczalną
> tolerancję.
No dooobra.
Zamieszcze tu po raz 473 w ciagu 20 lat podstawową formułkę
(Ba! KANON!), bo przy takiej wiedzy "mlodego pokolenia" znow
zaczną nam przychodzic ponaglenia o pilną zapłatę 0.00PLN.
a == b -> fabs(a - b) <= EPS
a != b -> fabs(a - b) > EPS
a < b -> (a - b) < -EPS
a > b -> (a - b) > EPS
a <= b -> (a - b) <= EPS
a >= b -> (a - b) >= -EPS
PS: Oczywiscie EPS moze miec rozna nature i wartosci zaleznie np.
od domeny (numeryka, finanse itp). Np. Moze byc bezwzgledne, ale
czesto bywa wzgledne, a w numeryce to juz w ogole...
Np. w optymalizacji moze byc dynamiczne (np zalezne nie tylko
od wartosci ale i innych cech funkcji, np gradientu) i sztuka
sama w sobie jest je dobierac/szacowac np w slabo zbieznych algorytmach
czy gdy np. funcja jest baaardzo stroma. No ale to juz zupelnie inna
"para kaloszy".
PS0: Oczywiscie w niektorych "higienicznych" przypadkach (np. szukanie
wartosci maksymalnej) dopuszczalne jest zwykłę >, ale to nie
łamie/przeczy w/w regułom.
AK
-
26. Data: 2019-06-16 21:43:50
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-13 15:37, Pszemol wrote:
> "Mateusz Viste" <m...@n...pamietam> wrote in message
> news:5d00f035$0$15194$426a74cc@news.free.fr...
>> On Wed, 12 Jun 2019 07:17:45 -0500, Pszemol wrote:
>>> Pisząc w Visual Basic 6 gostek porównywał rezultat konwersji CDbl()
>>> stringu od którego odjął stałą numeryczną 1.8 do lokalnej zmiennej
>>> double.
>>
>> Prawdziwi programiści nie używają liczb zmiennoprzecinkowych.
>
> Faktem jest, że gdy zmienne nie skaczą dynamicznie od e-15 do e+15 to
> warto znaleźć zakres wariacji mierzonej zmiennej, oczekwianą dokładność
> i zamiast na float operować na long integer * 10000 na przykład...
1. ile masz takich przypadkow w zyciu (owszem, fraktale).
2. przy dzisiejszych koprocesorach ? Na pewno warto ?
/Kiedys zdecydowanie tak, wiec absolutnie podejscia nie potępiam/.
AK
-
27. Data: 2019-06-16 21:48:57
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-13 23:22, bartekltg wrote:
>>> Prawdziwi programiści nie używają liczb zmiennoprzecinkowych.
>
> Pieprzenie. No, czyba, że programowanie = frontend.
100% zgody :) Uzyte slowo tez wlasciwe/adekwatne ;)
AK
-
28. Data: 2019-06-16 21:50:42
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-13 23:25, bartekltg wrote:
>> W ogolności
>> fl(a+b) = (fl(a)+fl(b))(1+eps), gdize ten epsylon to dokłądność
>> reprezentacji.
>
> Lepiej by było, jakbym napisał, że eps jest rzędu wielkośći reprezentacji.
O tak. To bardziej adekwatne.
AK
-
29. Data: 2019-06-16 21:53:24
Temat: Re: Porównywanie liczb, double float
Od: AK <n...@n...net>
On 2019-06-14 08:19, Mateusz Viste wrote:
> Prawdziwi programiści zakładają, że typ danych jest najwęższy możliwy:
> int=16, long=32, long long=64.
Niestety to duzy blad :(
AK
-
30. Data: 2019-06-16 22:10:11
Temat: Re: Porównywanie liczb, double float
Od: Szyk Cech <s...@s...pl>
> Musialbym sobie przypomniec ... ale przy okazji Assemblera raczej nikt
> nie poruszal takiego watku.
Pierwsze publikacje o Asemblerze x86 pomijały 386 i koprocesor.
W takiej "Asembler nie tylko dla orłów" Grzegorza Michałka
(Intersoftland 1997) jest opisany 386 (i 486) z koprocesorem. I co
prawda nie rozwodzi się tam nad dokładnością obliczeń, ale... Podaje
jako jeden z możliwych błędów/wyjątków: "Utrata precyzji"/"Błąd
precyzji" - bit 6 rejestru stanu koprocesora.
> Przy C predzej, ale to gdzies na pograniczu.
Tak czy owak nie powinno się pomijać kilku słów komentarza, podczas
omawiania typów zmiennoprzecinkowych, na temat potencjalnych problemów
przy ich stosowaniu.