Çift duyarlılık ve tek duyarlılık arasındaki fark hakkında bir şeyler okudum. Ancak, çoğu durumda, float
ve double
birbirinin yerine kullanılabilir gibi görünüyor, yani birini veya diğerini kullanmak sonuçları etkilemiyor gibi görünüyor. Durum gerçekten böyle mi? Float ve double ne zaman birbirinin yerine kullanılabilir? Aralarındaki farklar nelerdir?
İşte C99 (ISO-IEC 9899 6.2.5 §10) veya C++2003 (ISO-IEC 14882-2003 3.1.9 §8) standartları ne diyor:
Üç kayan nokta türü vardır: float
,
doubleve
long double. double
türü en azfloat
kadar hassasiyet sağlar velong double
türü en azdouble
kadar hassasiyet sağlar. floattüründeki değerler kümesi,
doubletüründeki değerler kümesinin bir alt kümesidir;
doubletüründeki değerler kümesi,
long double` türündeki değerler kümesinin bir alt kümesidir.
C++ standardı ekler:
Kayan nokta tiplerinin değer gösterimi uygulama tanımlıdır.
IEEE kayan nokta standardını derinlemesine ele alan mükemmel What Every Computer Scientist Should Know About Floating-Point Arithmetic kitabına bir göz atmanızı tavsiye ederim. Temsil detaylarını öğrenecek ve büyüklük ile hassasiyet arasında bir değiş tokuş olduğunu fark edeceksiniz. Büyüklük azaldıkça kayan nokta gösteriminin hassasiyeti artar, bu nedenle -1 ile 1 arasındaki kayan nokta sayıları en fazla hassasiyete sahip olanlardır.
Floatlar, double'lardan daha az hassasiyete sahiptir. Zaten biliyor olsanız da, daha iyi anlamak için Kayan Noktalı Aritmetik Hakkında Bilmemiz Gerekenler bölümünü okuyun.