-
Data: 2012-11-05 11:07:52
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 03.11.2012 22:22, slawek wrote:
> Użytkownik "Michoo" napisał w wiadomości grup
> dyskusyjnych:k73isd$sfj$...@m...internetia.pl...
>
>> Nie chce mi się sprawdzać, ale oidp jest to zaokrąglanie do
>> najbliższego. Zresztą tylko taka forma by miała sens przy tej dyskusji
>> o dokładności.
>
> Czyli jednak są zaokrąglane - a nie przycinane?
Są przycinane do 64 bitów afaik na 4 sposoby:
- down
- up
- near
- trunc
Domyślne jest near.
Wolę słowo "przycinane", niż zaokrąglane, bo inaczej mamy "zaokrąglanie
przez obcięcie bitów", a tak jest "przycięcie bitów (z zaokrągleniem)".
> Wiem, marudzę.
Marudzisz, zwłaszcza, że najpierw błędnie napisałeś o zaokrąglaniu w górę.
>
>> Tak. I jak Ci już wspomniano - w praktyce nie interesuje programisty
>> dokładność maszynowa a odległość między dwiema liczbami, czyli 2*e.
>> Komentarz jest błędny w nagłówku a dobry w matlabie.
>
> Po drugie - czyli jednak mam rację - jest błąd w float.h ? Jest!
Jest, ale wynika z czego innego niż myślisz.
>
> Po pierwsze - właśnie sam napisałeś, że to co jest równe 2.2E-16 to
> odległość między dwiema liczbami i nie jest to epsilon. I znowu mam
> rację?! Dziwne.
Nie epsilon _maszynowy_ na FPU x86, które jak już wspomniano jest 80
bitowe. To, że dodanie ~połowy tej wartości wystarcza dla uzyskania
1.0+e!=1.0 wynika z tych 80 bitów i polityki near. W szerszym typie
wynik masz bliżej (1.0+2.2E-16) niż 1.0 więc jest zaokrąglane do
(1.0+2.2E-16) w momencie przycięcia do double. Jeżeli byś operował na
czystym double (64 bit) to zabraknie ci bitów na reprezentację tej sumy
i afaik nadal dostaniesz 1.0.
W związku z tym:
- 2.2E-16 nie jest najmniejszą wartością jaka na FPU x86 spowoduje
zajście nierówności. Jest najmniejszą taką wartością w typie double.
>
> Po trzecie - zamiast napisać, cyt., "nie interesuje programisty" -
> powinieneś napisać, iż ciebie nie interesuje. (Czyli po prostu nie
> uogólniać swoich opinii jako opinii wszystkich programistów, bo są to -
> być może nawet bardzo celne - ale wyłącznie twoje własne spostrzeżenia.)
float.h jest częścią standardu i odnosi się do standardowych typów
float(32 bit) i double (64 bit). Gdyby ten nagłówek oparto o corner-case
x86 to programista piszący np na VFP by się bardzo zdziwił, że ten
epsilon nie działa.
Na którymś z egzotycznych procesorów (niagara? alfa?) można było
ustawiać zaokrąglanie dla każdego rozkazu fpu. Wyobrażasz sobie, że w C
trzeba by przy każdej operacji float/double podawać prefix jak to
zaokrąglić?
>
> Podsumowując - dobrze jeżeli jest już poprawka w Wikipedii - to
> pozytywny rezultat dyskusji. A problem jest dużo bardziej poważny, niż
> mi się wydawało - po prostu nie wiadomo ile bitów mantysy jest naprawdę
> użyte (tj. czy będą użyte 64 bitowe liczby double, czy 80 bitowe
> rejestry FPU, zależy od humoru kompilatora).
I zazwyczaj nie ma to znaczenia. Nikt nie robi poważnej numeryki
opierając się o to, że na x86 połowa epsilona double wystarcza.
--
Pozdrawiam
Michoo
Następne wpisy z tego wątku
- 05.11.12 11:52 slawek
- 05.11.12 12:14 slawek
- 05.11.12 12:48 slawek
- 05.11.12 13:04 slawek
- 05.11.12 13:10 Michoo
- 05.11.12 16:17 AK
- 05.11.12 16:33 Marek Borowski
- 05.11.12 19:38 slawek
- 05.11.12 19:53 slawek
- 05.11.12 20:32 slawek
- 05.11.12 20:46 kenobi
- 05.11.12 21:35 Tomasz Sowa
- 05.11.12 22:11 kenobi
- 06.11.12 00:16 slawek
- 06.11.12 00:19 Tomasz Sowa
Najnowsze wątki z tej grupy
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
Najnowsze wątki
- 2025-06-24 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-06-24 Warszawa => Młodszy Programista SQL / FrontEnd developer <=
- 2025-06-24 Warszawa => Junior C# / FrontEnd developer <=
- 2025-06-24 Warszawa => Sales Executive / KAM <=
- 2025-06-23 Warszawa => MENA New Business Manager <=
- 2025-06-23 Trójmiasto => Head of Social Media <=
- 2025-06-23 Tapeta w Xiaomi
- 2025-06-23 Gdańsk => Programista Kotlin <=
- 2025-06-23 Białystok => Programista Mainframe (z/OS, Assembler) <=
- 2025-06-23 Warszawa => Senior Account Manager <=
- 2025-06-23 Białystok => Mainframe (z/OS, Assembler) Developer <=
- 2025-06-23 Warszawa => Starszy Programista C <=
- 2025-06-23 Warszawa => Tester Automatyzujący <=
- 2025-06-23 Warszawa => Inżynier oprogramowania .Net <=
- 2025-06-23 Warszawa => Programista Full Stack .Net <=