PDA

Tam Sürümünü Görmek İçin : kayan nokta aritmetiği


BFS
27/03/2008, 20:11
A=[0.1 0.01
0.001 0.0001]

A 2x2 boyutlarında bir matris

B=10*A
C=A+A+...+A (10 tane A)
D=B - C

normalde D=0 (2x2 sıfır matrisi yani) olması gerekir ama bunu matlabda yaptığımda sonuc
sıfır çıkmıyor.Bunun nedeni galiba kayan nokta aritmetiğinden kaynaklanıyormuş.

Benim merak ettiği şey şu hemen hemen her dilde kayan nokta(double, float) veri tipi mevcut dolaysıyla bu türlerle yapılan işlemlerin sonucu da her zaman yaklaşık bir değer olarak mı dönüyor?


acehreli
27/03/2008, 21:46
Bazi degerler yaklasik olarak doner, bazi degerler tam olarak doner. Ikili sistem kullanildigi icin 2'nin arti ve eksi katlari olarak yazilabilen her sayi tam olarak doner.

Ama bunun da bir sInIrI var, cunku sayi icin ayrilan yer kisitlidir.

Ikinin katlari soyle:


Ust sInIr
.
.
3 8
2 4
1 2
0 1
-1 0.5
-2 0.25
-3 0.125
.
.
Alt sInIr


Ornegin 5.625 sayisi tam olarak saklanabilir ama ornegin 0.1 saklanamaz; cunku 0.1'i elde etmek icin sonsuz sayida terim eklemek gerekir.

Bunun ornegini onlu sistemde 1/3 sayisinda gorebiliriz: sonsuz terim yazabilsek sonsuz tane 3 ile 0.333... olur, ama bir yerde kesmek zorunda oldugumuz icin ancak yaklasik olarak tutabiliriz. 0.1'in ikili duzende gosterimi soyledir:

0.0001100110011...

Bununla ilgili cok bilgi bulunabilir. Rastgele bir tane:

http://docs.python.org/tut/node16.html

Bu konunun en cok bilinen makalesi de sudur:

http://docs.sun.com/source/806-3568/ncg_goldberg.html

Ama cok agir oldugu icin okunamayabilir. (Ben bitirmedim. :D )

Ali

BFS
27/03/2008, 23:40
Anladım hocam teşekkurler... ;)