-
51. Data: 2012-11-05 20:32:15
Temat: Re: [off] Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <s...@h...pl>
Użytkownik "AK" <n...@n...com> napisał w wiadomości grup
dyskusyjnych:k78lau$co8$...@n...task.gda.pl...
> Burakiem (tak tak, mimo ze "hrabią" to jednak burakiem), chamem
> i palantem zaczales byc dla mnie od momentu przeczytania tych
> twych slow do Bartka:
Piszesz nie na temat (przypominam, tematem jest DBL_EPSILON z float.h i
hasło z Wikipedii).
> Do momentu ew. przeprosin bede dalej w stosunku do ciebie uzywal
> tych zasadnych epitetow.
Wyraźnie masz problemy. Ale to są twoje problemy, z twoją samooceną. NTG
-
52. Data: 2012-11-05 20:46:09
Temat: Re: [off] Re: Błędny epsilon - this is not a bug, this is ?
Od: kenobi <p...@g...com>
>
> Wyraźnie masz problemy. Ale to są twoje problemy, z twoją samooceną. NTG
to sa wszystko problemy spod litery d (d r e dokladniej) Imo lepiej odeslac dresów
do dresa a siebie do assemblera (i am doin it such way)
[choc ostatnio tluke nie tyle asma co raczej ogla]
-
53. Data: 2012-11-05 21:35:47
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: Tomasz Sowa <t...@N...ttmath.org>
On 2012.11.03 16:10, slawek wrote:
>> Bo popełniasz błąd który się propaguje w każdej iteracji
>> algorytmu.
>
> Nie ma błędu. Za każdym razem jest na nowo sprawdzanie 1.0+eps > 1.0,
> tj. pętla while(1.0 + eps > 1.0) {...}
a no, tak sądziłem, sprawdź poniższy program
#include <iostream>
#include <stdint.h>
#include <iomanip>
template<typename float_t, typename int_t>
float_t machine_eps()
{
union
{
float_t f;
int_t i;
} one, one_plus, little, last_little;
one.f = 1.0;
little.f = 1.0;
last_little.f = little.f;
while(true)
{
one_plus.f = one.f;
one_plus.f += little.f;
if( one.i != one_plus.i )
{
last_little.f = little.f;
little.f /= 2.0;
}
else
{
return last_little.f;
}
}
}
int main()
{
std::cout << "machine epsilon:\n";
std::cout << "float: " << std::setprecision(18)
<< machine_eps<float, uint32_t>() << std::endl;
std::cout << "double: " << std::setprecision(18)
<< machine_eps<double, uint64_t>() << std::endl;
}
/home/tomek/roboczy/test$ g++ -o test test.cpp && ./test
machine epsilon:
float: 1.1920928955078125e-07
double: 2.22044604925031308e-16
ale to oczywiście tylko aproksymacja
--
Tomek
http://www.ttmath.org
-
54. Data: 2012-11-05 22:11:27
Temat: Re: [off] Re: Błędny epsilon - this is not a bug, this is ?
Od: kenobi <p...@g...com>
>
> to sa wszystko problemy spod litery d (d r e dokladniej) Imo lepiej odeslac dresów
do dresa a siebie do assemblera (i am doin it such way)
wogole u mnie w borlandowym naglowku sa takie stale co do epsilonow
#define DBL_EPSILON 2.2204460492503131E-16
#define FLT_EPSILON 1.19209290E-07F
#define LDBL_EPSILON 1.084202172485504434e-019L
gdyby ktos wkleil naglowki float.h z GCC i MSVS (najlepiej całe) to chetnie bym je
sobie zobaczyłi porownał
-
55. Data: 2012-11-06 00:16:22
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <s...@h...pl>
Użytkownik "Tomasz Sowa" <t...@N...ttmath.org> napisał w wiadomości grup
dyskusyjnych:k797v2$t98$...@n...dialog.net.pl...
> ale to oczywiście tylko aproksymacja
Popatrz na to w ten sposób - manipulujesz bitami, robisz unie, używasz
szablonów. I otrzymujesz wynik 2.22E-16.
A wystarczy napisać cout << (1.0 + 1.5E-16 > 1.0) << endl; i ew. sprawdzić,
co da cout << (1.5E-16 < 2.2E-16) << endl; .
-
56. Data: 2012-11-06 00:19:10
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: Tomasz Sowa <t...@N...ttmath.org>
On 2012.11.06 00:16, slawek wrote:
> Popatrz na to w ten sposób - manipulujesz bitami, robisz unie, używasz
> szablonów. I otrzymujesz wynik 2.22E-16.
>
> A wystarczy napisać cout << (1.0 + 1.5E-16 > 1.0) << endl; i ew. sprawdzić,
> co da cout << (1.5E-16 < 2.2E-16) << endl; .
No właśnie nie wystarczy, unie zrobiłem specjalnie żeby obliczenie
dodawania zrobić odpowiednio w 32 bitach (float) i 64 bitach (double). W
twoim przypadku obliczenia będą przeprowadzone w 80 bitach lub więcej
(zależnie od opcji kompilacji).
--
Tomek
http://www.ttmath.org
-
57. Data: 2012-11-06 00:53:27
Temat: Re: Bdny epsilon - this is not a bug, this is ?
Od: Roman W <b...@g...pl>
On Mon, 5 Nov 2012 11:52:16 +0100, "slawek" <s...@h...pl> wrote:
> Rozumiem, e za takie samo "zbureczanie" (pisowni pozostawiem bez
zmian)
> uwaasz np. CFL?
Zajmowanie si fajnymi rzeczami nie czyni automatycznie zajmujcego
si fajnym czowiekiem.
RW
-
58. Data: 2012-11-06 00:57:48
Temat: Re: Bdny epsilon - this is not a bug, this is ?
Od: Roman W <b...@g...pl>
On Mon, 05 Nov 2012 13:10:38 +0100, Michoo <m...@v...pl> wrote:
> Nie. Epsilon jako dokadno oblicze (do czego si odwoywae)
uywa
> si ewentualnie w opisie algorytmu. Jako warto w programie
przyjmuje
> si róne EPS (odlego miedzy wartociami) zalenie od zakresu na
> którym si pracuje, zazwyczaj do okrelenia relacji równowanoci i
s
> to setki albo tysice razy wiksze wartoci ni EPS_DOUBLE podczas
> liczenia na double.
Widziaem sytuacje, kiedy zmiana funkcji z inline na nie-inline
powodowaa wzgledna zmian kocowego wyniku o 1e-13.
RW
-
59. Data: 2012-11-06 03:28:35
Temat: Re: Bdny epsilon - this is not a bug, this is ?
Od: bartekltg <b...@g...com>
W dniu 2012-11-06 00:57, Roman W pisze:
> On Mon, 05 Nov 2012 13:10:38 +0100, Michoo <m...@v...pl> wrote:
>> Nie. Epsilon jako dokadno oblicze (do czego si odwoywae)
> uywa
>> si ewentualnie w opisie algorytmu. Jako warto w programie
> przyjmuje
>> si róne EPS (odlego miedzy wartociami) zalenie od zakresu na
>> którym si pracuje, zazwyczaj do okrelenia relacji równowanoci i
> s
>> to setki albo tysice razy wiksze wartoci ni EPS_DOUBLE podczas
>> liczenia na double.
>
> Widziaem sytuacje, kiedy zmiana funkcji z inline na nie-inline
> powodowaa wzgledna zmian kocowego wyniku o 1e-13.
Obcinanie pośrednich wyników do double (przy wejściu/wyjśćiu funkcji)
kontra liczenie wszystkiego w rejestrach koprocesora, czy coś głębszego?
pzdr
bartekltg
-
60. Data: 2012-11-06 06:35:25
Temat: Re: Bdny epsilon - this is not a bug, this is ?
Od: Roman W <b...@g...pl>
On Tue, 06 Nov 2012 03:28:35 +0100, bartekltg <b...@g...com>
wrote:
> Obcinanie porednich wyników do double (przy wejciu/wyjiu
funkcji)
> kontra liczenie wszystkiego w rejestrach koprocesora, czy co
gbszego?
Moe to? Albo inna kolejno oblicze. To byo C++ pod Windows.
RW