Błąd dodawnia

0

Witam, wiadomo że przy dodawaniu wiele razy liczby zmiennoprzecinkowej wystąpi błąd. Im liczba większa tym ten błąd większy. Mógłby mi ktoś wyjaśnić z czego ten błąd wynika i czemu im liczba większa tym błąd większy? ;)

 
	float a = 1.1;
	float b =1000.1;
	cout<<a<<endl;
	cout<<b<<endl;
	for (int i=0; i<1000; i++)
	{
		a+=0.1;
		b+=0.1;
	}
	cout<<a<<endl;
	cout<<b<<endl;
	system("pause");
0

Czyli liczby 0.1 nie da się zapisać binarnie i stosuje się pewne przybliżenie, ale czemu będzie większy błąd przy dużej liczbie tego dodawania? ;)

0

Nic nie koryguje tego błędu w drugą stronę, więc ten narasta.

0
Garniturek napisał(a):

Czyli liczby 0.1 nie da się zapisać binarnie i stosuje się pewne przybliżenie, ale czemu będzie większy błąd przy dużej liczbie tego dodawania? ;)
Przecież pod linkiem wszystko napisano, nawet narysowano, w tym ta kwestia też.

1

Błąd dodawania można zobaczyć już dla trzech składników http://ideone.com/J5lYR5
A tutaj http://ideone.com/JADJcB jest ciekawy trójkąt, którego pole obliczone ze wzoru Herona wynosi 0 jeśli zmienne są typu float, 972730 jeśli zmienne są typu double.

1 użytkowników online, w tym zalogowanych: 0, gości: 1